繁体   English   中英

Javascript regexp模板:仅在括号内的字符串相等时匹配

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM