javascript - 正则表达式匹配大括号内的内容,而嵌套大括号不会破坏它

标签 javascript regex

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

我基本上希望双花括号像任何其他文本一样工作,并且与它嵌套的匹配组分开,而不是单独的匹配或子匹配(非递归)

{
    <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/

相关文章:

javascript - 纯javascript mvc根据输入更新h1

javascript - 如何通过单击我的网站页面上的按钮来调用 Crossrider "background.js"中声明的 javascript 函数?

javascript - 用于匹配仅出现在字母之间而不是字符串开头或结尾的 ' (单引号)的单次出现的正则表达式

mysql - 正则表达式:仅匹配单个字符(MySQL)?

javascript - 通过node.js中的回调函数传递变量

javascript - 如何在没有 JSX 的情况下渲染多个 child

javascript - 将所有内容都纳入范围内会影响 Angular 性能吗?

regex - 提取逗号分隔的字符串

regex - 解析文件夹中的脚本文件,并在Powershell + RegEx中标记多行字符串

javascript - Google Code Prettify - 如何修复 SQL 转义字符