我正在编写一个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中工作。
答案 0 :(得分:2)
var codeblock = new RegExp("%\{[\S\s]+?\}%", 'g');
+?
和*?
表示:尽可能少地匹配以满足RE下一部分的条件。
我还从您的RE中移除了括号)
,因为[\S\s]
匹配每个字符(包括换行符)。