我目前正在使用{([^}]*)}
匹配一组花括号内的内容,但是当我在其中添加其他花括号后,它就会停止工作。
我基本上希望双花括号可以作为任何其他文本使用,并且与嵌套的匹配组分开,不是单独匹配或子匹配(不是递归)。
{
<div>
works
</div>
}
{
<div>
{{fails}}
</div>
}
以下是我目前所拥有的实例:http://regex101.com/r/pT5fA1/4
任何建议或意见都将不胜感激。
答案 0 :(得分:1)
我认为你正在寻找:
{((?:[^{}]|{{[^}]*}})*)}
模式细节:
{(
(?: # 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)*)}