我正在为我正在建设的网站使用javascript模板系统,而且我遇到了一些问题。
我正在使用以下正则表达式来匹配我的字符串中的部分:
/(\{\{(#|\^)(.*?)\?\}\}(.*?)\{\{\/(.*?)\?\}\})/
提供一个字符串,如:
{{#is_user?}} The user is an user {{/user?}}
在声明“user”= true时,显示字符串。当“is_user”设置为false时,不显示该字符串。但是我发现这不允许嵌套的空间:
{{#is_user?}} The user is an user {{#has_picture?}} and has a picture{{/has_picture?}} {{/user?}}
这将产生以下结果:
The user is an user {#is_user?}} The user is an user{{/user?}}
因此意味着匹配在{{#is_user?}}和{{/ has_picture?}}之间找到,因为正则表达式只是检查{{#anystring?}}和{{/ anystring? }}。
现在我的问题是,如果括号之间的两个字符串相等,只有匹配只能在{{#stirngA?}} {{/ stringA?}}时找到匹配。 / p>
答案 0 :(得分:2)
您可以使用反向引用使正则表达式仅匹配相应的开始标记。
E.g:
/(\{\{(#|\^)(.*?)\?\}\}(.*?)\{\{\/(\3)\?\}\})/
或没有捕获所有群组:
/(?:\{\{(?:#|\^)(.*?)\?\}\}(.*)\{\{\/(?:\1)\?\}\})/
\ 3(或\ 1)将包含第一个(。*?)的值。
在rubular上查看。
但这可能无法完全解决您的嵌套匹配问题。虽然您可以使用结果并再次应用正则表达式。也许这足以满足您的特定情况。