VSCode正则批量清理文本需先启用Regex模式(Alt+R/Cmd+Option+R),否则^$等失效;删空行须匹配换行符(LF用^\s*$\n,CRLF用^\s*\r?\n);删注释需按语言分写,避免误删;替换时用捕获组保缩进。

VSCode 用正则批量清理文本,核心就一条:别信“一键”,先开.*,再锚定^和$,否则90%的失败都卡在这儿。
为什么^import.*搜不到任何内容
因为没点右下角的.*图标——它不亮,^、$、\s全当普通字符处理。VS Code 默认是字面量搜索,^就是找脱字符^,不是行首。
- 必须手动按
Alt+R(Win/Linux)或Cmd+Option+R(macOS),直到右下角出现Regex标签 - 全局搜索(
Ctrl+Shift+H)和当前文件替换(Ctrl+H)都要单独开启,开关不跨面板继承 - 常见误判:
^\s*$找不到空行、console\.log匹配失败,八成是这个开关没开,别急着改正则
删空行必须吃掉换行符,否则白干
^\s*$ 替换为空,看起来还是空行——因为换行符\n没被匹配,编辑器照常渲染。真正删掉空行,得让正则覆盖到换行本身。
- LF 换行(Unix/macOS):用
^\s*$\n,替换留空 - CRLF 换行(Windows):用
^\s*\r?\n,\r?兼容回车可选 - 文件开头有 BOM(
\uFEFF)?\s不匹配它,第一行空行可能漏掉;可临时改用^\uFEFF?\s*\r?\n - 别用
^\n:这只会匹配文档开头就换行的怪情况,几乎不命中真实空行
删注释要分语言,单行/块注释不能混写
一个正则打天下不现实。不同语言注释语法差异大,硬套容易误删字符串里的//或破坏 JSON 结构。
- JS/TS:查
^\s*(?:\/\/.*|\/\*[\s\S]*?\*\/)\s*$\n?,[\s\S]*?防止贪婪吞掉后续代码 - Python/Shell:查
^\s*#.*$\n?,注意结尾$\n?保留行结构,避免合并上下文 - CSS:查
^\s*\/\*[\s\S]*?\*\/\s*$\n?,CSS 里没有单行注释,别加//分支 - ⚠️ 所有方案都不解析语法:
"// not a comment"会被误删,批量前务必点Preview看上下文
替换整行时缩进错乱?用捕获组保结构
直接搜 console\.log\(.*\); 替换为 debug(...);,会把前面的 4 个空格一起干掉,导致缩进崩溃。
- 正确写法:查
^(\s*)console\.log\((.*)\);,替$1debug($2); -
^(\s*)捕获行首所有空白(含 Tab),$1在替换中还原,对齐原位置 - 函数名和括号必须转义:
console\.log\(,否则.匹配任意字符,(被当分组开始 - 末尾分号要显式带上:如果原行有
;,替换里也得写;,不然语法可能报错
最麻烦的不是正则写不对,而是删完才发现 YAML 因空行消失而解析失败,或 Git diff 突然多出几百行改动——留一个空行不是妥协,是给机器和人留呼吸感。


















