Sublime正则替换JSON需先设语言为JSON或JSON with Comments,否则^/$锚定全文导致匹配失效;批量转数组用^(.+)$→"$1",修复key引号用(\["'\]?)([a-zA-Z_][a-zA-Z0-9_]*)\["'\]?\s*:→"$2":。

直接用正则替换处理接口返回的 JSON 字符串,必须先确保它是合法且语法高亮已启用为 JSON —— 否则所有查找都可能错位或漏匹配。
为什么 Ctrl+H 正则替换在 JSON 上经常“不生效”
不是正则写错了,而是 Sublime 默认把粘贴进来的接口响应当纯文本处理。右下角显示 Plain Text 或 JavaScript 时,^ 和 $ 会按“整个文档”而非“每行”锚定,尤其当关闭了 . matches newline 时,^ 可能只匹配开头,$ 只匹配结尾,中间全失效。
- 务必点击右下角语言标识 → 选
JSON或JSON with Comments - 如果接口响应含
//注释,Sublime 可能误判为 JavaScript,得手动切回 JSON - 粘贴后若发现引号、冒号没高亮,说明语法识别失败,正则替换大概率白忙
批量加引号和逗号生成 JSON 数组:用 ^(.+)$ 而不是 ^.*$
这是最稳路径:把原始文本(如每行一个字段名)转成 ["name", "age", "email"] 的标准数组元素。
-
^(.+)$→"$1":自动跳过空行,.+不匹配空字符串,安全 - 若原始含空行且想包成
"",改用^.*$→"$0",但后续要手动删末尾逗号或用,\s*(?=})清理 - 制表符或
\r\n混用?先执行Ctrl+Shift+P→Set Line Endings: Unix,避免部分行漏匹配 - 别依赖多光标:含注释(如
user_id // primary key)或多字段(name, age)时,Ctrl+Shift+L立刻失效
清理不规范 JSON key 的引号:用 (["']?)([a-zA-Z_][a-zA-Z0-9_]*)(["']?)\s*:
这不是简单加引号,是统一修复已有混乱写法(如 id:、"name":、'email':),输出标准 "id":。
- 查找:
(["']?)([a-zA-Z_][a-zA-Z0-9_]*)(["']?)\s*: - 替换:
"$2":—— 直接丢弃原引号,强制双引号 + 冒号 -
\s*:必须写在后面,顺序反了(如:\s*)会导致匹配失败 - 若 key 含短横线(
first-name)或点号(user.email),这个正则不适用,得换(["']?)([^"':\s]+)(["']?)\s*:并逐个校验
合并 JSON 数组元素为单行字符串时,绝不能用 Ctrl+J
Ctrl+J 是语义破坏操作:它不管括号层级、不识别键值对边界、不保留逗号,只机械拼接换行。JSON 对象里乱用会直接导致解析失败。
- 正确做法:先手动选中目标数组块(从
[到]),再正则分步处理 - 勾选 Regex,确保
. matches newline是 未勾选 状态 - 查找:
^\s*"→ 替换为:"(去行首缩进) - 查找:
\s*(?=")→ 替换为:","(换行+空白 → 逗号分隔) - 最后手动补上首尾
[和],比靠工具猜更可靠
真正难的不是写出正则,而是判断哪段文本该被正则处理、哪段必须留白——比如嵌套对象里的字符串值、带转义的双引号、注释行。这些地方一旦误替换,JSON 就废了。动手前先备份,或在小范围试跑。


















