Sublime正则本质是查找替换工具,不能替代Prettier等语法感知格式化器;对结构化文本高效,但需注意^$锚点、(?m)多行模式、\R换行符、^[ \t]*$删空行、Alignment插件对齐、(?s)跨行匹配及操作前预览。

Sublime 的正则表达式不是“写完就能格式化代码”,它本质是查找替换工具,不能替代语法感知型格式化器(如 Prettier、Black);但对结构清晰的文本、配置、日志、模板片段,用对正则能秒级对齐、补全、拆分、清洗——关键在模式是否稳、开关是否开、边界是否锁死。
为什么 ^$ 不匹配每行首尾?必须点↩或加 (?m)
默认情况下,^ 和 $ 只锚定整个文件的开头和结尾,不是每一行。比如写 ^import,只会命中文件第一行开头的 import,其他行完全不触发。
- 解决方法只有两个:点右下角的
↩(Match line breaks)按钮,或在正则开头显式加(?m),例如(?m)^import - Windows 下
$会停在前,导致换行符残留;更稳妥的是用 Sublime 内置的R(通用换行符)替代$,比如[ ]*R删空行末尾 - 不点↩也不加
(?m),所有行级定位类正则都失效,但你可能根本看不出错——因为没报错,只是没匹配上
删空行别用 ^s*$,用 ^[ ]*$ 更安全
s 在 Sublime 中会匹配
和
,用它删空行可能把文件末尾的换行符也吞掉,导致 Git 提交异常或 CI 构建失败。
- 正确写法是
^[ ]*$:只匹配空格和 Tab,不碰换行符 - 若需兼容全角空格、NBSP(
)、中文空格(u3000),扩展为^[ u3000 ]*$ - 执行前务必点
Find All预览,确认只圈中目标行;尤其注意最后一行是否被误删——^s*$常在这里翻车
对齐等号/冒号:靠插件还是正则?优先用 Alignment 插件
纯正则做对齐(比如把 a = 1、long_var_name = 2 变成右对齐)极难稳定,容易跨行错位或吃掉注释。Sublime 有成熟插件方案,比手写正则靠谱得多。
- 装
Alignment插件后,在用户设置里加:
{
"alignment_chars": [
{ "char": "=", "align_mode": "middle" },
{ "char": ":", "align_mode": "middle" }
]
}
- 选中要对齐的多行,按
Ctrl+Alt+Q(Windows/Linux)或Cmd+Ctrl+Q(macOS)即可 - 如果手动写正则强行对齐,大概率会破坏缩进层级或误吞括号内内容;这不是能力问题,是正则不适合做结构对齐
跨行匹配函数参数?先关 . matches newline,再加 (?s)
. 默认不匹配换行符,所以 console.log((.*?)) 在多行调用时必然截断。强行用 [sS]*? 虽能工作,但大文件易卡死,且无法处理嵌套括号。
- 真正可用的做法:勾选
. matches newline(或正则开头加(?s)),再用console.log((.*?)) - 但注意:
(?s)只影响.,不影响[^)]这类字符类;如果参数本身含换行,[^)]*仍会提前终止,得改用(?s)console.log((.*?))并人工确认闭合位置 - 更稳策略:先用 Prettier 把代码转成单行,再用简单正则处理;跨行 + 嵌套场景,正则不是第一选择
正则最危险的不是写错,而是没意识到它没生效——.* 图标没点蓝、替换框没同步开正则、Where 路径填了 * 却没预览结果,这些地方一漏,批量操作就等于批量破坏。

















