JS Regex匹配嵌套大括号外的字符

时间:2016-09-13 05:16:16

标签: javascript regex

我需要编写一个正则表达式来定位只存在于括号或大括号外的逗号。

目前我有:

var regex = /,(?![^{]*})(?![^[]*])/g

目标字符串为:

var str = '"a":[{"b":2,"c":["d"]}],"b":2'    // OK: only second comma matches

模式只能正确匹配第二个逗号。

目标字符串为:

var str = '"a":[{"b":2,"c":{"d":9}}],"b":2'    // OK: only second comma matches

该模式也只能正确匹配第二个逗号。

但是,当目标字符串包含数组和对象时,否定前瞻失败并且正则表达式匹配两个逗号。

var str = '"a":[{"b":2,"c":[{"d":9}]}],"b":2'    // BAD: both commas match

1 个答案:

答案 0 :(得分:0)

这个正则表达式将使用上面提到的示例(see demo):

["LADV", "MISC", "", "GCNBIZ", "UNIN", "", "", "TNW", "", "1", ""]

但它不是一般的正则表达式。

对于每个级别的嵌套括号,您需要展开正则表达式。例如,要匹配,(?!([^{]*{[^{]*})?[^{]*})(?!([^[]*\[[^[]*])?[^[]*]) ,您还需要:

"a":[{"b":2,"c":[{"d":[{"e":9}]}]}],"b":2

See second demo

这不是一个可扩展的解决方案,但它是唯一具有正则表达式的解决方案。 只是为了好奇。