我需要编写一个正则表达式来定位只存在于括号或大括号外的逗号。
目前我有:
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
答案 0 :(得分:0)
这个正则表达式将使用上面提到的示例(see demo):
["LADV", "MISC", "", "GCNBIZ", "UNIN", "", "", "TNW", "", "1", ""]
但它不是一般的正则表达式。
对于每个级别的嵌套括号,您需要展开正则表达式。例如,要匹配,(?!([^{]*{[^{]*})?[^{]*})(?!([^[]*\[[^[]*])?[^[]*])
,您还需要:
"a":[{"b":2,"c":[{"d":[{"e":9}]}]}],"b":2
这不是一个可扩展的解决方案,但它是唯一具有正则表达式的解决方案。 只是为了好奇。