Javascript正则表达式匹配偏执狂

Javascript正则表达式匹配偏执狂,javascript,regex,Javascript,Regex,我有一个json流,需要解码以提取完整的json部分,流的形式如下 {"a":1, "b":2}{"c":2,"e":3, "x":"eff"}{"3":4 正则表达式{([^}]+)}将完整组提取为 {"a":1, "b":2}` & `{"c":2,"e":3, "x":"eff"} 我遇到的问题是字符串数据可能包含{或},但这些数据总是用双引号括起来(“) 例如: 有可能有一个正则表达式将其拆分为多个组吗 {"a":1, "b":2}` and `{"c":2,"e":3, "

我有一个json流,需要解码以提取完整的json部分,流的形式如下

{"a":1, "b":2}{"c":2,"e":3, "x":"eff"}{"3":4
正则表达式
{([^}]+)}
将完整组提取为

{"a":1, "b":2}` & `{"c":2,"e":3, "x":"eff"}
我遇到的问题是字符串数据可能包含{或},但这些数据总是用双引号括起来(“)

例如:

有可能有一个正则表达式将其拆分为多个组吗

{"a":1, "b":2}` and `{"c":2,"e":3, "x":"ab{cd}efg"}`

以下正则表达式对问题的回答:
{(?“[^”]*“|[^{])+}
但是,如果
\“
可以出现在
”。“
中,则正则表达式变为
{(?:\ \。[^]])*“[^{])+}

这与括号、单引号和双引号(确保有一对引号)以及冒号另一侧的括号、单引号和双引号匹配,并添加数字,但不包含引号

如果不想匹配单引号和双引号,可以简化为:

({("[^{]+":(?:".+"|\d+),?\s?)+})

使用JSON解析器。这是最好的长期解决方案。JavaScript中的单个正则表达式无法做到这一点。您需要做的解析比使用简单正则表达式更多。(纯正则表达式根本无法做到这一点,但某些环境具有支持它的扩展。JavaScript没有。)谢谢,它通过了我所有的测试用例,除了{“foo”:“}”是匹配的这是因为回溯,前提是输入应该是格式良好的,可以在负字符集中添加
[^{]
{([^“]*”[124;[^{]+}
{((:\.[^]])*“[^+}
({(("|')[^{]+\3:(?:("|').+\4|\d+),?\s?)+})
({("[^{]+":(?:".+"|\d+),?\s?)+})