Sublime正则替换必须严格启用.模式、限定路径并预览匹配,否则易误操作;删空行须用^[ \t]$而非^\s*$,提取参数宜用1+防越界,重命名变量需\b锚定边界并人工校验双下划线。) ↩

Sublime 的正则替换不是“能用就行”,而是必须配合锚点、边界和引擎特性才能安全批量操作;盲目启用 .* 模式后直接 Replace All,90% 的误替换都发生在这一步。
删空行和行尾空格为什么不能用 \s
因为 \s 在 Sublime 中匹配 \n 和 \r,^\s*$ 实际会吞掉只含回车符的“假空行”,甚至破坏文件末尾换行结构。
- 删真正空行(含空格/Tab):查找
^[ \t]*$,替换留空 - 删行尾空格+Tab:查找
[ \t]+$,替换留空 - 绝对不要用
^\s*$或\s+$——它们在跨平台文件中行为不可控
提取括号内参数时 [^)]+ 比 .*? 更可靠
.*? 非贪婪但无边界意识,遇到换行、注释或嵌套括号(如 fn(getUser()))极易越界;[^)]+ 显式声明“只取非右括号字符”,天然防破界。
- 安全提取单层函数参数:查找
\(([^)]+)\),替换为$1 - 需跨行时,先勾选
. matches newline,再用\{[\s\S]*?\}匹配大括号块 - 嵌套括号(如
if (a && (b || c)))无法用 Sublime 正则一步解决,必须分步或人工校验
批量重命名下划线变量必须加 \b 且避开双下划线
直接搜 _([a-z]) 会误改 __init__ 中的下划线,而 \b 能锚定单词边界,但 Sublime 不支持 (? 这类负向断言,得靠组合策略。
- 查找
\b([a-z]+)_([a-z])([a-z]*)\b,替换为$1\u$2$3(\u是 Sublime 特有转义,首字母大写) - 若字段含数字(如
user_id),改用\b([a-z0-9]+)_([a-z])([a-z0-9]*)\b,但注意user_123仍可能被误捕获 - 双下划线变量(
__name__)无法全自动跳过,务必先Find All预览,手动排除
跨文件替换前 Where 路径不设限等于裸奔
Ctrl+Shift+F 的 Where 栏填 * 或 ./,等同于把整个磁盘当靶子打——node_modules、build/、甚至 .git/config 都可能被卷入。
- 限定路径示例:
src/**/*.js、!node_modules/**、!dist/** - 每次执行前必须点
Find看匹配列表,确认每条路径都在预期范围内 - 替换预览面板(
Ctrl+Shift+H)比“相信自己写的正则”更可靠
最易被忽略的是:每次打开 Ctrl+H 或 Ctrl+Shift+F 后,.* 图标默认是灰色的——它不会继承上次状态,必须手动点蓝,否则所有元字符都当字面量处理。

















