Javascript 正则表达式以匹配大括号内的内容,而嵌套大括号不会打断它

Javascript 正则表达式以匹配大括号内的内容,而嵌套大括号不会打断它,javascript,regex,Javascript,Regex,我目前正在使用{([^}]*)}匹配一组大括号内的内容,但一旦我在其中添加其他大括号,它就会停止工作 我基本上希望双大括号充当任何其他文本,并且是嵌套在其中的匹配组的一部分,不是单独的匹配或子匹配(不是递归的) { <div> works </div> } { <div> {{fails}} </div> } { 作品 } { {{失败} } 以下是我目前拥有的一个活生生的例子: 任何建议都将不

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

我基本上希望双大括号充当任何其他文本,并且是嵌套在其中的匹配组的一部分,不是单独的匹配或子匹配(不是递归的)

{
    <div>
    works
    </div>
}

{
    <div>
    {{fails}}
    </div>
}
{
作品
}
{
{{失败}
}
以下是我目前拥有的一个活生生的例子:


任何建议都将不胜感激。

我想您正在寻找:

{((?:[^{}]|{{[^}]*}})*)}
图案详情:

{(
(?:               # non capturing group
    [^{}]         # all that is not a curly bracket
  |               # OR
    {{[^}]*}}     # a string inside double curly brackets
)*                # zero or more times
)}
更有效的方法是使用:

不幸的是,Javascript没有这个特性。但是,您可以使用一个技巧来模拟它,该技巧使用了前瞻的内容自然是原子的这一事实:

{((?:(?=([^{}]+|{{[^}]*}}))\2)*)}

我认为您正在寻找:

{((?:[^{}]|{{[^}]*}})*)}
图案详情:

{(
(?:               # non capturing group
    [^{}]         # all that is not a curly bracket
  |               # OR
    {{[^}]*}}     # a string inside double curly brackets
)*                # zero or more times
)}
更有效的方法是使用:

不幸的是,Javascript没有这个特性。但是,您可以使用一个技巧来模拟它,该技巧使用了前瞻的内容自然是原子的这一事实:

{((?:(?=([^{}]+|{{[^}]*}}))\2)*)}

美丽的非常感谢你。我已经试了好几个小时了。快速提问,可能是不可能的,但是有没有一种使用这种布局的方法也允许在主捕获组中使用随机括号?@Matthew:你不能使用javascript regex,因为它没有递归功能。方法是解析字符串,并在遇到花括号时增减变量。当变量等于零时,花括号是平衡的。我也这么认为。谢谢你的建议和上面的模式。真的很感激!美丽的非常感谢你。我已经试了好几个小时了。快速提问,可能是不可能的,但是有没有一种使用这种布局的方法也允许在主捕获组中使用随机括号?@Matthew:你不能使用javascript regex,因为它没有递归功能。方法是解析字符串,并在遇到花括号时增减变量。当变量等于零时,花括号是平衡的。我也这么认为。谢谢你的建议和上面的模式。真的很感激!