gpt4 book ai didi

JavaScript 正则表达式模板 : only match when string inside brackets is equal

转载 作者:行者123 更新时间:2023-12-02 19:52:33 24 4
gpt4 key购买 nike

我正在为我正在构建的网站使用 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 .

但这可能无法完全解决您的嵌套匹配问题。尽管您可以使用结果并再次应用正则表达式。也许这足以满足您的具体情况。

关于JavaScript 正则表达式模板 : only match when string inside brackets is equal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9098774/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com