Javascript正则表达式模板:仅当括号内的字符串相等时匹配

Javascript正则表达式模板:仅当括号内的字符串相等时匹配,javascript,regex,templates,template-engine,Javascript,Regex,Templates,Template Engine,我正在为我正在构建的网站使用javascript模板系统,我遇到了一些问题 我使用以下正则表达式来匹配字符串中的节: /(\{\{(#|\^)(.*?)\?\}\}(.*?)\{\{\/(.*?)\?\}\})/ 向其馈送字符串,例如: {{#is_user?}} The user is an user {{/user?}} 当声明“user”=true时,显示字符串。当“is_user”设置为false时,不显示字符串。但是,我发现这样做不允许有嵌套的空间: {{#is_user?}

我正在为我正在构建的网站使用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#u user?}和{/has#u picture?}之间找到的,因为正则表达式只是检查{{{{anystring?}和{{/anystring?}之间的匹配


现在我的问题是,如果括号之间的两个字符串相等,那么只有当{{{stirngA?}{{/stringA?}}}时才能找到匹配项,那么是否可以说只有匹配项才存在。

通过使用反向引用,您的正则表达式才能与相应的开始标记匹配

例如:

或者不捕获所有组:

/(?:\{\{(?:#|\^)(.*?)\?\}\}(.*)\{\{\/(?:\1)\?\}\})/
\3(或\1)将包含第一个(.*)的值

在电视上看


但这可能无法完全解决嵌套匹配的问题。尽管您可以使用结果并再次应用正则表达式。对于您的具体案例来说,这可能已经足够了。

非常感谢,我仍然需要在实践中对其进行测试,但目前看来这正是我所需要的。也谢谢你的红宝石链接,我一直在寻找这样的东西。
/(?:\{\{(?:#|\^)(.*?)\?\}\}(.*)\{\{\/(?:\1)\?\}\})/