正则替换前必须点击 .* 按钮启用正则模式,否则 \d、^、$ 等被当作普通字符;跨文件替换用 ctrl+shift+f;捕获组引用用 $1 而非 \1;多行替换需捕获缩进并慎用 (?s)。

正则替换前必须点 .* 按钮,否则 \d、^、$ 全当普通字符
Sublime 默认关闭正则模式,哪怕你写了 \d+ 或 ^function,它也只按字面意思找字符串 \d+,不会匹配数字。必须手动点击查找框右下角的 .* 图标(或按 Alt+R),让图标变蓝高亮才算启用。常见错误是写完 console\.log\([^)]*\) 却没点 .*,结果“Find All”零匹配——不是正则写错,是根本没开开关。
跨文件批量替换要用 Ctrl+Shift+F,不是 Ctrl+H
Ctrl+H 只作用于当前文件;真要改整个项目,得用 Ctrl+Shift+F 打开「Find in Files」面板。关键操作有三步:
- 在
Where栏填路径,比如./src/**/*.js(注意双星号支持递归) - 确保
.*已启用,且Replace输入框非空 - 点
Find先预览匹配列表,确认数量和上下文无误再点Replace All
漏掉 Find 预览这步,容易把 node_modules 里的内容也一并改了(虽然 Sublime 默认忽略它,但自定义 Where 路径时可能绕过)。
捕获组引用必须用 $1,不能用 \1
想把 firstName lastName 换成 lastName, firstName,得写:
查找:(\w+)\s+(\w+) 替换:$2, $1
用 \1 或 \2 会原样输出字符串,不触发引用。另外注意:$0 表示整个匹配项,$1 是第一个 () 捕获的内容,别数错括号层级。如果正则里用了嵌套括号但没用 ?: 声明非捕获组,$2 可能指向意料之外的子串。
多行结构替换要小心缩进和换行符
比如把 function foo() { 改成 const foo = () => {,直接用 function (\w+)\(\) \{ 查找,替换为 const $1 = () => {,会丢失原缩进,导致格式错乱。更稳妥的做法是:
- 查找:
^(\s*)function (\w+)\(\) \{(开头捕获空白) - 替换:
$1const $2 = () => {(复用$1缩进) - 若涉及跨行内容(如多行注释块),需加
(?s)前缀,例如(?s)/\*\*[\s\S]*?\*/
真正难的不是写正则,而是判断哪些地方需要保留上下文、哪些可以安全覆盖——每次改之前,先 Find All 看一眼高亮结果,比写十遍正则都管用。











