sublime正则替换需手动启用.*模式,否则元字符失效;字面量特殊字符必须显式转义;捕获组用()定义、$1引用;\s匹配换行符但.不匹配\n,空行用^\s*$删除。

Sublime正则替换必须手动启用 .* 模式
不点右下角.*图标,所有正则元字符都当普通字符串处理——d、^、$全失效,连_都不会被识别为元字符。这是 90% 替换失败的根源。
启用方式只有两种:Ctrl+H(Windows/Linux)或Cmd+H(macOS)呼出面板后:
- 点击右下角
.*图标(变蓝即生效) - 或按
Alt+R快捷键切换
常见错误:写了console.log([^)]*)却没开.*,结果搜不到任何内容;开了但漏转义.和(,导致匹配整行甚至卡死。
字面量特殊字符必须显式转义
Sublime 使用 PCRE 引擎,.、+、?、[、^、$、(、)、|、 等在正则中均有含义。想匹配它们本身,必须加反斜杠:
- 匹配点号
.→ 写成. - 匹配左括号
(→ 写成( - 匹配美元符
$→ 写成$ - 匹配反斜杠
→ 写成\
注意:.*模式开启后,Sublime 不自动补转义,也不会提示你漏了——它就安静地按字面去搜,搜不到也不报错。
捕获组与反向引用的写法细节
用()定义捕获组,替换时用$1、$2引用。但括号本身是元字符,所以:
- 要捕获内容 → 用未转义的
(),如func((.*?)) - 要匹配字面括号 → 必须转义为
(和),如func((.*?)) - 错误写法:
func(.*?)→$1为空,因为没定义捕获组 - 正确写法:
func((.*?))→ 替换为func{$1}才有效
多个捕获组顺序严格对应:如(d{4})-(d{2})-(d{2})中,$1是年,$2是月,$3是日。
空白与换行符的匹配陷阱
s在 Sublime 中统一匹配空格、制表符、
、
等,但要注意:
-
s包含换行符,但.默认不匹配(除非额外点图标启用“dot matches newline”) - 删空行推荐用
^s*$,但末尾的是真实要删掉的换行符,不是匹配的一部分 - 合并多行?别用
直接替换为空格——先确认文件换行符类型(CRLF/LF),再统一用作为换行标识(Sublime 内部已归一化) - 只匹配空格和制表符?用
[ ]比s更安全,避免误吞
真正容易被忽略的是:正则里的
永远表示换行符,无论原始文件用的是 Windows 还是 Unix 换行格式——Sublime 在加载时已做标准化,不用自己判断
还是
。











