sublime text将多行文本转为["a", "b", "c"]格式需两轮正则替换:先用^(.+)$→"$1"为每行加引号,再用\r?\n→,补逗号,最后手动加[和];关键须提前清理空行、尾部空格及统一lf换行符。

Sublime Text 本身不解析数据结构,它只做文本层面的模式匹配和替换。所谓“转换数据格式”,本质是用正则把原始文本重排成目标字符串形态——比如把换行列表变成 ["a", "b", "c"],或把 CSV 行转成 SQL INSERT 语句。成败关键不在正则多高级,而在三处细节是否处理干净:换行符类型、空行、尾部空格。
怎么把多行文本转成 ["a", "b", "c"] 格式
这是最常翻车的场景。不能用 join_lines,它不加引号、不处理空行、也不管 JSON 语法。必须两轮正则替换:
- 第一轮加引号:打开替换面板(
Ctrl+H),启用.*模式,查找^(.+)$,替换为"$1"。注意:.+不匹配空行,所以空行会跳过 - 第二轮加逗号:查找
\r?\n,替换为,(逗号+空格)。Windows 粘贴进来的文本大概率是\r\n,只写\n会漏掉部分换行 - 最后手动在开头加
[,结尾加];或者全选后用Ctrl+Shift+P→insert at beginning of line插入[,再类似方式补]
为什么 Ctrl+J(join_lines)不能用于构造数组
join_lines 是拼接行为,不是结构化转换。它默认加空格,且完全无视语法边界:
- 遇到带注释的代码,比如
// item1换行item2,Ctrl+J会变成// item1 item2,注释吞掉下一行 - JSON 元素若含引号或嵌套结构,例如
"name": "foo"换行"age": 25,会被压成一行但缺逗号,JSON 解析失败 - 它不处理空行——原始数据里有空行,
Ctrl+J会把它们变成"a" "" "b",数组里混入空字符串
如何清理干扰项:空行、尾部空格、换行符不统一
这三类问题不会报错,但会让结果不可用,且极难肉眼发现:
- 空行:先用查找
^\s*$+ 替换为空,删掉所有空白行;否则第二轮\r?\n替换会在空行位置生成多余, - 尾部空格:查找
[ \t]+$(注意\t),替换为空;否则引号里会多出看不见的空格,比如"apple " - 换行符:菜单栏
File → Line Endings → Unix (LF)统一为 LF;否则每次正则都得写\r?\n,容易漏
后续要用 jq 验证数组合法性,怎么配环境
Sublime 本身不校验 JSON 合法性。如果你配置了 Build System 调用 jq,但提示 jq: command not found,这不是插件问题:
- 检查系统 PATH 是否包含
jq.exe(Windows)或jq(macOS/Linux)所在目录 - 在终端执行
jq --version确认命令可用;不可用就去 jq 官网 下载并加入 PATH - Build System 中调用时,确保路径正确,比如
"cmd": ["jq", ".", "$file"],而不是硬编码绝对路径
真正麻烦的从来不是正则怎么写,而是你有没有在替换前花 10 秒删空行、去空格、统一分隔符——这些动作不产生视觉反馈,却决定结果能不能直接用。











