Sublime默认不启用正则模式,需手动开启.*按钮或快捷键;元字符如.、+、?、[、^、$须转义,.不匹配换行,边界和转义缺一不可。

为什么“特殊符号”总替换失败?
不是正则写错了,而是 Sublime 默认把 .、+、?、[、^、$ 这些当普通字符——除非你手动点右下角 .* 按钮或按 Alt+R(Windows/Linux)/Cmd+Alt+R(macOS)。没开这个,\d+ 就匹配不到数字,^ 就只认全文开头。
常见现象:
- 搜
user_name想替成userName,结果_name全被删了——因为没加\b或空格边界,也没转义下划线 - 想删掉
console.log(...),写了console.log(.*?)却没匹配到——漏了\.和\(的转义 - 用
"([^"]*)"提取字符串,结果跨行就断掉——.默认不匹配换行符
怎么安全匹配和替换含符号的文本?
关键不是“怎么写强”,而是“怎么写准”。特殊符号要分两类处理:一类是正则元字符(必须转义),一类是业务符号(如 /、-、@,通常不用转,但得加边界)。
- 所有正则元字符在查找框里都需显式转义:
\.匹配字面点号,\$匹配字面美元符,\(和\)匹配括号 - 路径类符号如
/、\不是正则元字符,但容易误伤(比如/api/v1/中的/),建议加单词边界或上下文限定:\b/api/v1/\b或(? - 中文、emoji、破折号(—)、省略号(…)等 Unicode 符号可直接写进正则,但前提是文件编码为 UTF-8(菜单 → File → Save with Encoding → UTF-8 with BOM)
- 想匹配“任意非引号内容”,别用
.*?,改用[^"]*;想跨行,用[\s\S]*?而不是(?s).*?(后者在大文件中易卡)
$1 总原样输出?检查这三个硬条件
捕获组引用失效,90% 是因为没同时满足这三点:
- 右下角
.*图标已点亮(状态栏显示 Regex) - 查找框里用了
()且括号严格配对(Sublime 不支持(?:)非捕获组) - 替换框里写的是
$1,不是\1、${1}或$1(后者是字面量)
嵌套编号按左括号顺序算:(a(b(c))) 中 $1 = abc,$2 = bc,$3 = c。想输出字面 $,必须写 $$。
清洗混合符号文本的典型操作链
真实清洗往往不是单步,而是“查→删→补→验”四步闭环。比如清理一段带注释、空行、多余空格的配置片段:
- 先统一换行符:菜单 → File → Line Endings → Unix(避免
^/$失效) - 删空行:
^[ \t]*$\R?(关闭. matches newline),替换留空 - 删行尾空格:
[ \t]+$→ 替换为空 - 给 key/value 加标准化空格:
(\w+):(\S)→ 替换为$1: $2(注意冒号后加空格) - 最后一定点
Find All看高亮是否精准——哪怕只差一行,也说明边界没控住
真正麻烦的从来不是符号多难写,而是每次替换前没验证 Find All 是否真命中目标文本。那一步跳过,后面全是白忙活。

















