我正在尝试编写一个正则表达式来匹配任何出现在“$”之间的单词,例如 var myString = " there was a $dog$# and a $rat$ in a town"; 我想匹配狗和老鼠我已经为它写了表达式
var reg = /^$(.*)$/gmi
但这不是因为“$”是行尾的特殊字符,我该如何转义它,我可以使用“\”吗?你能建议正确的表达方式吗?
我正在尝试编写一个正则表达式来匹配任何出现在“$”之间的单词,例如 var myString = " there was a $dog$# and a $rat$ in a town"; 我想匹配狗和老鼠我已经为它写了表达式
var reg = /^$(.*)$/gmi
但这不是因为“$”是行尾的特殊字符,我该如何转义它,我可以使用“\”吗?你能建议正确的表达方式吗?
正如您在一些评论中提到的,贪婪存在问题。*
将尽可能多地消耗,因此如果像这样使用它,如果以后能找到另一个,.*
它也会消耗更多。$
有两种可能性。最快和最常见的一种方法是简单地使该量词变得不贪婪:
/\$(.*?)\$/g
现在它将尽可能少地消耗。然而,推荐的方法是使重复和分隔符互斥并保持重复贪婪:
/\$([^$]*)\$/g
这通常更有效,因为不需要回溯。(请不要阻止我,在任何特定情况下,回溯版本可能仍然更有效,但这是通常推荐的做法)
是的,转义是用\
-s 完成的,如果你想捕捉单个$...$
标记的单词,试试这个正则表达式:
/\$([^$]+)\$/gmi // inside character classes ( the []-s) you don't need to escape it, but if you do it does the same thing
正如您所说,您应该使用 '\' 来转义特殊字符。'^' 也是您要匹配的字符串的开头。您应该使用以下内容:
/\$(.*)\$/g
/\$(.*)\$/
\
正如您所想,您用于逃避。此外,鉴于您的要求,^
(字符串开头)是有害的。
如果您多次出现此类字符串,则必须小心贪婪(默认),因此您要么禁止内容中的终止符:
/\$([^$]*)\$/g
或者您使重复运算符不贪心:
/\$(.*?)\$/g
我可以用吗 ”\” ??
是的。
你为什么不自己尝试呢?
var reg = /^\$(.*)\$/gmi
将匹配:
$
$