正则表达式匹配花括号内的内容而没有嵌套大括号打破它

时间:2014-08-01 03:07:53

标签: javascript regex

我目前正在使用{([^}]*)}匹配一组花括号内的内容,但是当我在其中添加其他花括号后,它就会停止工作。

我基本上希望双花括号可以作为任何其他文本使用,并且与嵌套的匹配组分开,不是单独匹配或子匹配(不是递归)

{
    <div>
    works
    </div>
}

{
    <div>
    {{fails}}
    </div>
}

以下是我目前所拥有的实例:http://regex101.com/r/pT5fA1/4

任何建议或意见都将不胜感激。

1 个答案:

答案 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)*)}