应使用正则 api.oldMethod() 匹配废弃调用,注意转义点号和括号;避免误加^/$、慎用.*;按上下文替换为null/false/注释;别名需人工补全;字符串和模板字面量需人工或AST工具辅助识别。

匹配形如 api.oldMethod() 的废弃调用
Sublime Text 的正则查找默认不支持多行匹配,但废弃 API 往往是单行调用,所以直接用 api\.oldMethod\(\) 即可。注意点号必须转义,括号也要转义,否则会被当作正则元字符处理。
常见错误是写成 api.oldMethod()(没转义),结果匹配不到任何内容;或者误加 ^/$ 锁定行首尾,导致中间嵌套调用(如 if (api.oldMethod()) {...})被漏掉。
- 推荐开启
.*按钮(即Regular Expression和Match Case两个开关) - 如果想同时捕获带参数的变体,可用
api\.oldMethod\([^)]*\) - 避免用
.*匹配参数,它可能跨过换行或吃掉太多内容,[^)]*更安全
批量替换为 null 或空字符串的取舍
直接删掉整行调用容易破坏语法结构,比如 const res = api.oldMethod(); 删掉后变成 const res = ;,报错。稳妥做法是替换成 null 或 undefined,保持赋值语句合法。
但如果该调用原本是独立语句(如 api.oldMethod();),替换成 null; 就多余且易混淆。此时更适合替换为空行或注释掉。
- 独立语句 → 替换为
// [deprecated] api.oldMethod(); - 赋值右值 → 替换为
null(如api.oldMethod()→null) - 条件判断中 → 替换为
false,避免逻辑意外为真(如if (api.oldMethod())→if (false))
处理别名导入场景:如 import { oldMethod as apiOld } from 'x'
只搜 api.oldMethod 会漏掉通过解构/别名引入的调用。需要额外覆盖类似 apiOld\(\)、legacyApi\(\) 这类自定义别名。
这类名称没有统一前缀,只能靠项目约定或搜索 import 语句反推。建议先全局搜 import.*oldMethod 或 from.*api,定位所有别名定义位置,再逐个添加到正则中。
- 可组合 OR 表达式:
(api\.oldMethod|apiOld|legacyApi)\(\) - 别名通常出现在同一文件顶部 import 区,Ctrl+Shift+F 搜
import.*oldMethod很快能列出来 - Sublime 不支持动态变量名匹配,没法一次扫完所有别名,必须人工补全
验证是否还有残留:用负向先行断言避开注释和字符串
搜 oldMethod 可能误中注释里的说明文字或字符串字面量(如 console.log("calling oldMethod"))。用 (? 并不能可靠跳过注释,因为 Sublime 的 PCRE 引擎对变长负向先行断言支持有限。
更可行的方式是分两步:先用 "[^"]*oldMethod[^"]*" 和 '[^']*oldMethod[^']*' 找出字符串中的误匹配,人工跳过;再用 ^(?!//).*oldMethod\(\) 粗筛非注释行(注意 ^ 需配合 Whole Word 关闭,否则只匹配行首)。
- 字符串内匹配无法全自动过滤,必须人工确认
- Sublime 的
Find All(Alt+Enter)能高亮全部匹配项,滚动查看上下文最快 - 真正难搞的是模板字符串(
`xxx ${oldMethod()}`),它跨行又嵌套,正则很难精准识别,这类建议 grep + AST 工具辅助
eval、Function 构造,正则根本碰不到。这种得靠运行时日志或代码扫描工具补位。

















