必须勾选“.*”启用正则模式,否则^、$、[\s\s]等全部失效;匹配三类注释的正则为^\s*(?:\/\/.*|\/\*[\s\s]*?\*\/|\#.*)?$\n?,需分两步清理以保留合理空行,并注意误删非注释内容。

VSCode正则删注释必须勾选「.*」按钮
不启用正则模式,^、$、[\s\S]全失效,输入的只是普通字符串。快捷键 Ctrl+H(Windows/Linux)或 Cmd+H(macOS)打开替换面板后,右上角那个 .* 图标必须点亮——这是所有后续操作生效的前提。
匹配三类注释的正则:^\s*(?:\/\/.*|\/\*[\s\S]*?\*\/|\#.*)?$\n?
这个表达式覆盖 JS/TS/C++ 的 //、C/Java/TS 的 /* */、Python/Shell 的 #,同时吞掉纯空行。关键点:
-
[\s\S]*?替代.*:VSCode 正则默认不跨行,.不匹配换行符,必须用[\s\S]才能捕获块注释中的多行内容 -
*?是非贪婪匹配:避免从第一个/*一直吃到文件末尾最后一个*/ -
^\s*锚定行首 + 允许前导空白:只匹配真正以注释开头的行(或缩进后跟注释),不会误杀fetch(url); // comment这类行尾注释 -
\n?在末尾:防止删完注释后多出一个空行,但无法处理 EOF 无换行符的情况
删完代码挤成一团?先保空行再清冗余
直接用上面正则会连带删掉注释占的换行,导致函数之间没了分隔。更稳妥的做法是分两步:
- 第一步删注释但保留空行:
^\s*(?:\/\/.*|\/\*[\s\S]*?\*\/|\#.*)$→ 替换为空 - 第二步清理连续空行:
^\s*$\n\s*$\n→ 替换为\n(只留一个换行符) - 注意:如果文件末尾有空行且无换行符,
^\s*$匹配不到,得手动删最后一行
这些地方容易被当成注释但其实不是
正则是纯文本扫描,不解析语法,以下内容会被误删或漏删:
- TypeScript 的三斜杠指令(如
///<reference path="./types.d.ts"></reference>)也以///开头,但不是注释;可用^///\s.*$规避(加空格断言) - CSS 或 HTML 中的
url(//cdn.com)、background: linear-gradient(to right, #000, #fff)里的//会被误杀 - Python 的 docstring(
"""...)不是注释,该正则完全不碰它;真要删需另写\"\"\"[\s\S]*?\"\"\" - 文件编码不是 UTF-8 时,某些 Unicode 空格会让
\s失效,导致空行删不干净
最易被忽略的是预检:点 Find All 看高亮是否精准落在你预期的注释行上,尤其检查第一行、最后一行、含缩进的注释行——一旦错配,恢复成本远高于多花十秒确认。











