因为[^)]*无法跨行匹配,需改用[\s\s]*?并启用. matches newline,否则多行参数会被截断。

为什么console.log替换总漏掉部分调用?
因为\bconsole\.log\([^)]*\)只匹配不带换行的单行调用,一旦日志参数跨行(比如对象字面量或模板字符串),括号内[^)]*就直接断在第一行末尾,后续内容被跳过。
解决办法是启用. matches newline(点右下角.按钮或按Alt+R),再改用\bconsole\.log\(([\s\S]*?)\)——[\s\S]强制匹配任意字符(含换行),*?保证非贪婪,停在第一个闭合括号处。
- 别用
.*?开头:它在未启用. matches newline时根本跨不了行 - 避免
(?s)前缀:Sublime 的 PCRE 引擎虽支持,但某些旧插件或大文件中会触发兼容性卡顿 - 实测建议:先
Find All确认匹配范围,尤其检查多行函数体是否被完整圈中
如何安全地把var批量转成const或let?
不能直接搜var 然后替成const ——会误改various、verbose这类单词,甚至破坏var x = function() {}中已有的function作用域判断。
真正可用的是词边界 + 变量声明结构:\bvar\s+([a-zA-Z_$][\w$]*)\s*=\s*(?!function\b)。它确保只匹配「独立单词var + 空格 + 合法变量名 + 等号 + 非function开头的值」。
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- 替换填
const $1 =,保留原变量名 - 若需区分
const和let,得人工扫一遍赋值右侧是否重赋值——Sublime 正则无法做 AST 分析 - 注意
$在变量名中合法,所以[\w$]*比\w*更准;\b必须写在var前后,否则myvar也被捕获
replace()里$1突然失效,哪里断了?
三个硬条件缺一不可:.*图标没点蓝、查找框没写带括号的捕获组、跨文件替换时Where路径填错或留空。其中最容易忽略的是第三个——Ctrl+Shift+F全局替换时,若Where填*,Sublime 会把node_modules里上万份console.log全卷进来,而$1引用可能指向完全无关的上下文。
- 务必限定路径,如
src/**/*.js或!**/test/** - 替换后文件不会自动标星号,
Ctrl+K松开→Ctrl+B保存全部,否则改了等于没改 - 命名捕获组
${name}在 Sublime 中支持,但$10这种两位数编号不认,最多到$9
为什么JSON.stringify参数重排总出错?
想把JSON.stringify(obj, null, 2)统一改成JSON.stringify(obj, null, 4),直接搜JSON\.stringify\([^)]*\)再替换,大概率把JSON.stringify(a, b)里的b也当缩进参数——正则没能力识别参数语义。
正确做法是分两步:先用JSON\.stringify\(([^,]+),\s*null,\s*(\d+)\)精准捕获第三参数,替换为JSON.stringify($1, null, 4);再单独处理无null的变体,如JSON\.stringify\(([^,]+),\s*(\d+)\)。
- 别指望一个正则吃下所有情况,JavaScript 函数调用的灵活性远超正则表达式的能力边界
- 遇到
JSON.stringify(obj, replacer, space, extra)这种非法四参调用,正则会直接失焦——该交给 ESLint 或 Prettier - 所有涉及嵌套括号(如
JSON.stringify({ a: [1, 2] }))的场景,Sublime 不支持(?R)递归,必须接受「提取不完整」或换工具
import语句顺序、提取 JSX 中的{ }表达式、或根据作用域重命名变量。这些地方正则容易越界匹配,该让位给语言服务器或专用重构工具。Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










