如何用JavaScript正则获取(test)后的完整JSON?
解决正则提取完整嵌套JSON的问题
嘿,我来帮你搞定这个问题!你之前的正则只拿到部分JSON,核心原因是用了非贪婪量词+?——它会在遇到第一个闭合的}就停止匹配,可你的JSON里嵌套了对象和数组,自然就截断了。
方案1:针对你的特定场景((test)后紧跟完整JSON)
把正则改成贪婪匹配,同时确保能匹配所有字符(包括换行):
/\(test\)(\{[\s\S]+\})/gi
[\s\S]:匹配任意字符(空格+非空格,覆盖所有情况,包括换行)+:贪婪模式,会一直匹配到最后一个},刚好对应最外层JSON的闭合括号,这样就能拿到完整的JSON内容。
方案2:更严谨的嵌套括号匹配(支持PCRE等引擎)
如果你的正则引擎支持平衡组/递归匹配(比如PHP、Python的re模块(需开启对应标志)、Regex101里的PCRE模式),可以用这个更可靠的正则,能处理任意层级的嵌套括号:
/\(test\)(\{(?:[^{}]|(?R))*\})/gi
(?:[^{}]|(?R)):要么匹配非括号的普通字符,要么递归匹配整个括号结构,完美识别嵌套的{}和[],确保只提取最外层的完整JSON。
测试你给出的字符串,用这两个正则都能正确提取到完整的JSON:
{"data":{"test1":true,"test2":0,"test3":false,"test4":"","test5":""},"testarray":[{"value":"test","alt":"test-1"}]}
内容的提问来源于stack exchange,提问作者SPQRInc
相关产品推荐
相关产品推荐

