与[\ S \ s] *匹配? vs(。)+ regexps

时间:2011-09-17 18:06:04

标签: javascript regex

我尝试使用JavaScript匹配两个标记%{}%之间的内容。

我有正则表达式在regex测试器中工作,但是当我将它们放入我的代码时它们不起作用。我认为这可能是一个逃避问题,但我不确定。

以下正则表达式有效,但不允许使用空格:

var databinder = new RegExp("%\{(.)+\}%", 'g');

以下正则表达式适用于正则表达式测试程序,并允许空格,但它不会在我的代码中返回任何匹配项:

var databinder = new RegExp("%\{[\S\s]*?\}%", 'g');

仅当我删除:

时才有效
[\S\s]*?

导致正则表达式在第二个示例中不起作用的原因是什么?

以下是我匹配的文字示例:

<td align="right" style="width: 123px;">%{toFixedEx(#{surcharge()}#,2,4)}%</td>
<td align="right" style="width: 123px;">%{toFixedEx(#{extendedPrice()}#,2,2)}%</td>

1 个答案:

答案 0 :(得分:5)

使用字符串时,您需要在任何特殊的正则表达式修饰符上双重转义反斜杠:

var databinder = new RegExp("%\\{[\\S\\s]*\\}%", 'g');

或者您可以使用正则表达式文字:

var databinder = /%\{[\S\s]*?\}%/g;