sublime中查不到console.log是因未启用正则模式,需点击.图标或按alt+r;替换时防误伤需用^sconsole.log(1);s$等边界锚点。) ↩

查不到 console.log?先确认正则模式有没有真打开
很多人输完 console.log(.*?) 却一个匹配都没有,不是正则写错了,是根本没进正则模式。Sublime 的查找面板默认就是“纯文本搜索”,.* 在没激活时就是两个字符,不是通配符。
- 必须手动点击查找框左下角(或右下角,视版本而定)的
.*图标,让它变蓝才算启用;按Alt+R也能切换,但图标状态更直观 -
Ctrl+F、Ctrl+H、Ctrl+Shift+F三个面板的正则开关**各自独立**——替换成空了却还在文件里看到console.log,大概率是Ctrl+H面板的.*没点开 - 全局搜索
Ctrl+Shift+F里即使路径填了src/**/*.js,只要.*没亮,搜的仍是字面量console.log(.*?),不可能匹配任何东西
删 console.log 却把注释和字符串也干掉了?得锁住“独立语句”边界
直接搜 console.log 全局替换,很容易误伤 // console.log() 或 'console.log(x)'。正则不会自动识别语法上下文,得靠锚点和字符集自己划清界限。
- 安全写法:
^s*console.log([^)]*);s*$——^和$锁整行,s*吃前后空白,[^)]*防跨括号,结尾分号收口 - 如果想转成注释而不是删除,替换栏填:
// $0($0表示整行原始匹配,保留原格式可回滚) - 这个正则不处理带换行的参数(如
console.log(`a b`)),也不处理模板字符串;遇到这类,要么人工处理,要么加(?s)开启 dotall 模式,但风险陡增,不建议无差别开启
想把 getUserInfo(id) 改成 getUserInfo({ id })?别用 .*?,用 [^)]+
.*? 看似简单,但在嵌套或含空格/逗号时容易“破界”。比如 getUserInfo(a, b) 会被 .*? 吞掉整个括号内容,但若后面紧跟另一个函数,就可能越界匹配到下一行。
- 推荐写法:
getUserInfo(([^)]+))→getUserInfo({ $1 }),[^)]+明确表示“至少一个非右括号字符”,天然防跨括号 - 要兼容空参
getUserInfo(),把+改成*:getUserInfo(([^)]*)) - 如果参数前后有空格(如
getUserInfo( userId )),加 s*:getUserInfo(s*([^)]*?)s*),*?让它非贪婪,避免吞掉后面空格
替换栏写
不换行?那是把换行符当字符串了
搜索时写
是匹配真实换行符;但替换栏里写
,Sublime 会把它当两个字符输出——反斜杠 + 字母 n。真要插入换行,得用 Sublime 自己的转义规则。
- 替换时换行必须写:
(两个字符:反斜杠 + 小写 n) - 如果想输出字面量
字符串,得写:\n - 例如把逗号分隔列表转成多行:
,(?!$)替换为:,结果才是每项一行
In Selection 没勾选,就可能把配置文件或 README 里的示例代码一起改了;Where 里填 * 而不是 src/**/*.js,就等于在 node_modules 上裸奔。每次点 Replace All 前,先看一眼 Find All 预览列表,比什么都管用。










