本文介绍一种能准确匹配 json 字段值(支持转义双引号)的正则表达式方案,避免因 `\"` 导致截断,并说明其局限性及更可靠的替代方案。
在解析 JSON 字符串时,若需通过正则提取特定字段(如 "Name": "..." 中的值),简单使用 [^"]+ 会因遇到未转义的 " 而提前终止——例如对 "Business unit \"Test Demo\"",它只捕获 Business unit,而遗漏了被转义的后续内容。
正确的思路是:允许匹配 \" 作为整体,同时拒绝未转义的 " 作为结束符。以下正则可满足该需求:
"(?<=Name\":\s?\")((?:\\.|[^\\\"])*)"
| 输入 JSON 片段 | 匹配结果 |
|---|---|
| "Name": "Test name 123" | Test name 123 |
| "Name": "Business unit \"Test Demo\"" | Business unit "Test Demo" |
| "Name": "" | (空字符串) |
综上,该正则是一种实用的临时方案,但不应替代真正的 JSON 解析逻辑。