0

我正在尝试编写一个正则表达式来匹配任何出现在“$”之间的单词,例如 var myString = " there was a $dog$# and a $rat$ in a town"; 我想匹配狗和老鼠我已经为它写了表达式

       var reg = /^$(.*)$/gmi 

但这不是因为“$”是行尾的特殊字符,我该如何转义它,我可以使用“\”吗?你能建议正确的表达方式吗?

4

5 回答 5

2

正如您在一些评论中提到的,贪婪存在问题。*将尽可能多地消耗,因此如果像这样使用它,如果以后能找到另一个,.*它也会消耗更多。$有两种可能性。最快和最常见的一种方法是简单地使该量词变得不贪婪:

/\$(.*?)\$/g

现在它将尽可能少地消耗。然而,推荐的方法是使重复和分隔符互斥并保持重复贪婪:

/\$([^$]*)\$/g

这通常更有效,因为不需要回溯。(请不要阻止我,在任何特定情况下,回溯版本可能仍然更有效,但这是通常推荐的做法)

于 2012-11-22T09:43:19.530 回答
1

是的,转义是用\-s 完成的,如果你想捕捉单个$...$标记的单词,试试这个正则表达式:

/\$([^$]+)\$/gmi // inside character classes ( the []-s) you don't need to escape it, but if you do it does the same thing
于 2012-11-22T09:34:01.650 回答
1

正如您所说,您应该使用 '\' 来转义特殊字符。'^' 也是您要匹配的字符串的开头。您应该使用以下内容:

/\$(.*)\$/g
于 2012-11-22T09:32:34.627 回答
1
/\$(.*)\$/

\正如您所想,您用于逃避。此外,鉴于您的要求,^(字符串开头)是有害的。

如果您多次出现此类字符串,则必须小心贪婪(默认),因此您要么禁止内容中的终止符:

/\$([^$]*)\$/g

或者您使重复运算符不贪心:

/\$(.*?)\$/g
于 2012-11-22T09:32:55.393 回答
0

我可以用吗 ”\” ??

是的。

你为什么不自己尝试呢?

var reg = /^\$(.*)\$/gmi

将匹配:

  • 字符串的开始
  • 一个$
  • 零个更多字符
  • 一个$
于 2012-11-22T09:32:19.133 回答