[英]Javascript regexp templates: only match when string inside brackets is equal
我正在为我正在建设的网站使用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?}}时找到。
您可以使用反向引用使正则表达式仅匹配相应的开始标记。
例如:
/(\{\{(#|\^)(.*?)\?\}\}(.*?)\{\{\/(\3)\?\}\})/
或者没有捕获所有组:
/(?:\{\{(?:#|\^)(.*?)\?\}\}(.*)\{\{\/(?:\1)\?\}\})/
\\ 3(或\\ 1)将包含第一个(。*?)的值。
在rubular上看到它。
但这可能无法完全解决嵌套匹配问题。 虽然您可以使用结果并再次应用正则表达式。 也许这足以满足您的具体情况。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.