我目前正在使用 {([^}]*)}
匹配一组花括号中的内容,但是一旦我在其中添加了闭合的其他花括号,它就会停止工作。
我基本上希望双花括号像任何其他文本一样工作,并且与它嵌套的匹配组分开,而不是单独的匹配或子匹配(非递归)。
{
<div>
works
</div>
}
{
<div>
{{fails}}
</div>
}
这是我目前拥有的一个实例:http://regex101.com/r/pT5fA1/4
如有任何建议或建议,我们将不胜感激。
最佳答案
我认为您正在寻找:
{((?:[^{}]|{{[^}]*}})*)}
图案细节:
{(
(?: # non capturing group
[^{}] # all that is not a curly bracket
| # OR
{{[^}]*}} # a string inside double curly brackets
)* # zero or more times
)}
一种更有效的方法是使用 atomic group :
{((?>[^{}]+|{{[^}]*}})*)}
不幸的是,Javascript 没有这个功能。但是你可以用一个技巧来模拟它,这个技巧利用了前瞻的内容自然是原子的这一事实:
{((?:(?=([^{}]+|{{[^}]*}}))\2)*)}
关于javascript - 正则表达式匹配大括号内的内容,而嵌套大括号不会破坏它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25072277/