Sublime查找替换正则_Sublime正则表达式搜索技巧【搜索】

1次阅读

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

Sublime查找替换正则_Sublime正则表达式搜索技巧【搜索】

查不到 console.log?先确认正则模式有没有真打开

很多人输完 console.log(.*?) 却一个匹配都没有,不是正则写错了,是根本没进正则模式。Sublime 的查找面板默认就是“纯文本搜索”,.* 在没激活时就是两个字符,不是通配符。

  • 必须手动点击查找框左下角(或右下角,视版本而定)的 .* 图标,让它变蓝才算启用;按 Alt+R 也能切换,但图标状态更直观
  • Ctrl+FCtrl+HCtrl+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 预览列表,比什么都管用。

text=ZqhQzanResources