
本文介绍一种能准确匹配 json 字段值(支持转义双引号)的正则表达式方案,避免因 `\"` 导致截断,并说明其局限性及更可靠的替代方案。
在解析 JSON 字符串时,若需通过正则提取特定字段(如 "Name": "..." 中的值),简单使用 [^"]+ 会因遇到未转义的 " 而提前终止——例如对 "Business unit \"Test Demo\"",它只捕获 Business unit,而遗漏了被转义的后续内容。
正确的思路是:允许匹配 \" 作为整体,同时拒绝未转义的 " 作为结束符。以下正则可满足该需求:
"(?<=Name\":\s?\")((?:\\.|[^\\\"])*)"
正则解析:
- (?
- ((?:\\.|[^\\\"])*):主捕获组,匹配零个或多个如下字符:
- \\.:任意以反斜杠开头的转义序列(如 \"、\\、\n 等);
- [^\\\"]:非反斜杠、非双引号的普通字符;
- 使用 *(而非 +)确保兼容空字符串(如 "Name":"")。
示例验证:
| 输入 JSON 片段 | 匹配结果 |
|---|---|
| "Name": "Test name 123" | Test name 123 |
| "Name": "Business unit \"Test Demo\"" | Business unit "Test Demo" |
| "Name": "" | (空字符串) |
注意事项:
- 空格兼容性:上述表达式仅支持冒号后 0 或 1 个空白符。若需容忍更多空格(如 "Name" : "value"),可将 \s? 替换为 \s{0,10},但无法覆盖极端格式(如超长空白);
- JSON 结构限制:正则无法处理嵌套对象、数组或跨行字符串,也不校验 JSON 语法合法性;
- 根本建议:始终优先使用标准 JSON 解析器(如 Python 的 json.loads()、JavaScript 的 JSON.parse())。它们能正确处理所有转义、编码、嵌套与边界情况,且安全可靠;正则仅适用于简单、受控的预处理场景。
综上,该正则是一种实用的临时方案,但不应替代真正的 JSON 解析逻辑。










