JavaScript正则表达式 - 匹配除了之外的所有内容

时间:2011-09-17 14:40:59

标签: javascript regex

我正在编写一个JavaScript模板解析器,我接近最终解决方案,但是我想在模板的绑定块中允许空格(我与正则表达式匹配)。

现在我有以下内容:

var codeblock = new RegExp("%\{[\S)]+\}%", 'g');

给出一个模板行,如下所示:

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

将匹配:

%{toFixedEx(#{extendedPrice()}#,2,2)}%

但是我想在%{}%之间允许空格和换行符,所以我尝试了以下正则表达式:

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

最终匹配:

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

我希望能够做的是匹配:

 %{
    if (condition) {
       toFixedEx(#{surcharge()}#,2 ,4)
    }
    else {
       toFixedEx(0,2,4)
    }
 }%

匹配在}%结束,而不是继续到模板中的最后一个右大括号。我尝试过子跟踪的字符类,但它看起来不像是在JavaScript中工作。

1 个答案:

答案 0 :(得分:2)

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

+?*?表示:尽可能少地匹配以满足RE下一部分的条件。

我还从您的RE中移除了括号),因为[\S\s]匹配每个字符(包括换行符)。