sublime text全局搜索需手动启用正则模式(点击.*图标或快捷键alt+r/cmd+alt+r),默认不生效;其使用boost引擎,^/$需(?m)实现行首尾匹配,替换用$1而非\1,where栏仅支持glob不支持正则。

全局搜索框里怎么启用正则模式
Sublime Text 的全局搜索(Ctrl+Shift+F / Cmd+Shift+F)默认不开启正则,必须手动点一下搜索框右下角的 .* 图标,或者按 Alt+R(Windows/Linux)或 Cmd+Alt+R(macOS)切换。没点这个,写再多 \d+ 或 [a-z]+ 都当普通字符串匹配。
常见正则写法和实际效果差异
Sublime 使用的是 Boost 正则引擎(v4+),语法接近 PCRE,但不完全等价。几个关键点:
-
^和$在多行文本中默认只匹配整个搜索范围的开头/结尾,不是每行——要实现“行首匹配”,得配合(?m)模式修饰符,比如(?m)^TODO -
\s匹配空格、制表符、换行符;但\n本身在搜索框里不能直接输入,需用\n字面量(Sublime 会自动解析) - 捕获组可用,但替换时要用
$1、$2,不是\1;且只有在启用了「Replace」面板并勾选「Regular Expression」后才生效 - 中文字符可直接写,如
函数.*?,但懒惰匹配.*?有效,.+?同理
搜索路径和文件类型限制怎么配合正则
全局搜索的「Where」栏不只是填路径,还能用 glob 模式过滤文件,它和正则是两套系统,别混用:
- 想搜所有 JS 文件里的箭头函数:「Find」填
=>.*{,「Where」填**/*.js - 排除 node_modules:
!node_modules/**—— 注意前面的!,多个排除用英文逗号分隔,如!node_modules/**,!dist/** - 「Where」不支持正则,所以不能写
.*\.ts$;要搜 TS 文件,只能用**/*.ts - 路径区分大小写取决于系统,macOS 默认不区分,Linux 区分,Windows 多数情况不区分——但 Sublime 的 glob 不做大小写转换,
**/*.JS不会匹配index.js
容易卡死或漏匹配的几个坑
正则写得太宽泛,尤其带 .* 又没限制上下文,Sublime 可能假死或跳过部分结果:
- 避免无锚定的
.*error.*,改用\berror\b或"error"限定边界 - 跨行匹配慎用
[\s\S]*,Sublime 对超长跨行正则响应慢;优先拆成两行模式,比如先搜fetch\(,再人工看下一行是否含then\(|catch\(|await - 搜索大项目时,如果「Where」路径太宽(如只填
.),即使正则简单,也会遍历所有文件导致延迟;明确限定目录更稳 - 替换时若勾选了「In Selection」但当前没选中任何文本,Sublime 会静默失败,不会报错——务必确认状态栏是否显示 “x replacements”
正则真正难的不是语法,是预判它会在哪些文件里触发、会不会回溯爆炸、以及 Sublime 底层怎么切分缓冲区来执行匹配。调的时候多试两组小样本,比硬写一长串更省时间。











