Javascript 正则表达式:仅匹配非嵌套组

Javascript 正则表达式:仅匹配非嵌套组,javascript,regex,Javascript,Regex,我有一些文本,模式类似于: new{test}anotherone{test{nest}}new1{test1}new2{test2} 我不熟悉正则表达式,正在尝试创建一个匹配组的模式,以便针对每个匹配: 第一组:新 第2组:测试 我使用JavaScript处理([\S][a-z-()->)\{([^?+]*?)\} 但是,我想忽略带有嵌套的块,以便从匹配中忽略另一个{test{nest}。这是我的尝试 提前谢谢 更新: 字符串也可能嵌套在嵌套零件内,例如 new{test}ignore_th

我有一些文本,模式类似于:

new{test}anotherone{test{nest}}new1{test1}new2{test2}
我不熟悉正则表达式,正在尝试创建一个匹配组的模式,以便针对每个匹配: 第一组:新 第2组:测试

我使用JavaScript处理
([\S][a-z-()->)\{([^?+]*?)\}

但是,我想忽略带有嵌套的块,以便从匹配中忽略另一个{test{nest}。这是我的尝试

提前谢谢

更新: 字符串也可能嵌套在嵌套零件内,例如

new{test}ignore_this{test1{test1}{test2{test2}}new{test}new{test}

这样它应该只匹配:Group1:new/Group2:test

您可以尝试使用此正则表达式来匹配
new
test
的每一对(输入中有3对):

(?

正则表达式详细信息:

  • (?:确保前一个位置没有
    {
  • \b
    :单词边界
  • ([^{}]+)
    :匹配组1中非
    {
    }
    的任何字符的1+
  • {
    :匹配
    {
  • ([^{}]*)
    :匹配组2中非
    {
    }
    的任何字符的0+
  • }
    :匹配一个
    }
  • (?![^{}]*})
    :负前瞻,断言在没有任何
    {
    }
    的情况下,我们前面没有结束的

Try
\b(?,请参阅。您也可以在结尾使用负前瞻([^\s{}+)\{([^{}]*}(?!})
谢谢!如果字符串中有嵌套呢?例如,
new{test}忽略这个{test1}{test2}{test2}新{test test new test test},我想忽略整个代码{test2{test2}}
?我可以更新问题以反映此边缘情况:)@o1n3n21:你有机会尝试我更新的答案吗?也不明白这里否决的原因。谢谢我刚刚接受了答案,没有否决,不确定这是从哪里来的。再次感谢你的帮助!
(?<!{)\b([^{}]+){([^{}]*)}(?![^{}]*})