sublime正则替换入口为ctrl+h(win/linux)或cmd+h(macos),需点击右下角.*按钮启用正则模式,否则\d、$1等无效;常见用于函数名改写与参数重排,如getuserbyid(id)→user.get($1),注意括号转义、空格适配及非贪婪匹配。

正则替换在哪打开、怎么触发
Sublime 的正则替换入口在 Ctrl+H(Windows/Linux)或 Cmd+H(macOS),不是靠菜单栏「查找→替换」点进去——那个默认不带正则开关,容易误以为功能没生效。打开后务必点击右下角的 .* 按钮,让它变蓝,表示启用正则模式;否则 \d、$1 这类符号全当普通字符处理。
常见重构场景:函数名批量改写 + 参数重排
比如要把 getUserById(id) 改成 user.get(id),同时把 saveUser(name, email) 改成 user.save({name, email})。这类操作不能靠简单字符串替换,得靠捕获组和反向引用:
find: getUserById\((\w+)\)
replace: user.get($1)
find: saveUser\((\w+),\s*(\w+)\)
replace: user.save({$1, $2})
注意点:
-
$1、$2是 Sublime 用的反向引用语法,不是\1(那是部分命令行工具的写法) - 括号必须转义:
\(和\),否则会被当作分组符而非字面括号 - 逗号后可能有空格,用
\s*更鲁棒,否则匹配失败 - 如果想跨行匹配,需勾选左下角的
.\n按钮(启用「点号匹配换行」)
小心这些正则陷阱
实际重构时最容易翻车的是边界控制和贪婪匹配:
- 用
\b匹配单词边界,避免把getUserById替换成user.get后,又误伤getUserId—— 后者不含ById但含Id,若只搜Id就会连带改掉 -
.*默认贪婪,console.log(.*)可能吞掉整行甚至下一行内容;改用.*?非贪婪更安全 - 替换前先用
Alt+Enter(或Cmd+Enter)预览所有匹配项,确认无误再点Replace All;误操作没法 Ctrl+Z 回退全部替换 - 涉及 JSON 或模板字符串时,
{、}不用转义,但$在 replace 字段里有特殊含义,要输出字面$得写成$$
进阶:用正则 + 多行编辑快速补全 import / export
当你把一堆函数抽成独立模块后,需要批量加 export 或补 import,这时正则配合 Sublime 的多光标很高效。例如给所有函数声明前加 export :
find: ^(\s*function\s+\w+\() replace: export $1
关键细节:
-
^表示行首,但需确保未开启「匹配整个文件」(即没点左下角的Aa图标里的「全字匹配」) -
\s*吸收缩进,避免只匹配顶格函数而漏掉嵌套在 if/for 里的 - 如果目标是箭头函数,
=>里有空格变化,建议用(?i)const\s+\w+\s*=\s*\(?[^\)]*\)?\s*=>这类宽松模式,而不是死磕格式
真正难的不是写出正则,而是判断哪部分该严格、哪部分该放行——重构前花两分钟看三处真实代码样例,比对着文档调十分钟正则更省时间。











