求匹配大括号{}内双引号的正则表达式,用于转义处理
匹配大括号内双引号的正则方案
直接可用的正则(非嵌套大括号场景)
如果你的文本里没有嵌套的大括号结构,用这个正则就能精准匹配所有{}内部的双引号:
"(?=(?:[^{}]*{[^{}]*})*[^{}]*$)
或者更易读的版本:
(?<=\{(?:[^{}])*)"(?=(?:[^{}])*\})
工作原理
(?<=\{(?:[^{}])*):反向预查,确保当前引号前面存在一个{,且两者之间没有其他大括号(避免跨大括号误匹配)":目标匹配的双引号(?=(?:[^{}])*\}):正向预查,确保当前引号后面存在一个},中间也没有其他大括号
支持嵌套大括号的版本
如果文本包含嵌套大括号(比如{data: {"subkey": "value"}}),需要用支持递归的正则引擎(如JS ES2018+、Python 3.10+、PCRE),正则如下:
"(?=(?:(?:(?!\{|\})|(?R))*+\})
替换示例
输入示例:
{"name": "Alice", "profile": {"age": 30, "city": "London"}}
将匹配到的"替换为\"后,输出:
{"name": "Alice", "profile": {"age": 30, "city": "London"}}
兼容旧引擎的备选方案
如果你的正则引擎不支持预查(比如旧版JavaScript),可以用捕获组循环替换:
(\{[^{}]*?)"([^{}]*?\})
替换规则使用$1\"$2,重复执行替换直到没有新匹配项为止。
内容的提问来源于stack exchange,提问作者iKnowMac
相关产品推荐
相关产品推荐

