先删块注释:用/*[\s\s]*?*/并启用“. matches newline”;再删行首注释:用^\s(?://|#).$;不同语言需换对应正则;操作前必须find all并人工抽检三处以上。

先删 /*[\s\S]*?*/ 块注释,必须勾选 “. matches newline”
块注释跨行时,/*.*?*/ 会失效——因为默认的 . 不匹配换行符,正则只在单行内扫描,结果漏掉真正多行的注释块。唯一稳定写法是 /\*[\s\S]*?\*/,其中 [\s\S] 显式覆盖所有字符(含换行),? 确保非贪婪,避免从第一个 /* 一路吃到文件末尾最后一个 */。操作前务必点击查找面板右下角那个 .\n 图标启用跨行匹配。
再删 ^\s*(?://|#).*$ 行注释,别碰行中注释
直接搜 //.*$ 或 #.*$ 很危险:会把 https://api.com、url = "a.com#anchor" 一起干掉。加 ^\s* 锚定行首或缩进位置,才能只命中真注释。这个表达式不处理行中注释(如 int x = 1; // init),因为强行删它会破坏代码结构;若真需要,得改用 \s+(?://|#).*$ 并手动逐个确认。
不同语言必须换正则,不能混用 /* */ 通配
Python 的三引号文档字符串不是 /* */,得用 """[\s\S]*?""" 或 '''[\s\S]*?''';HTML 要用 <!--[\s\S]*?-->;CSS/JS 的 /* */ 虽然写法一样,但若文件语法被设为 Plain Text,Sublime 就无法识别字符串边界,/\*[\s\S]*?\*/ 可能误吞 "/* in string */"。操作前看右下角语言名,或按 Ctrl+Shift+P → Set Syntax 显式指定。
永远先点 Find All,再人工抽检三处以上
正则删注释不是无状态替换。即使用了最稳妥的表达式,仍可能误删:const r = /a\/b/; 里的 /、JSON 字符串中的 /*、配置文件里带 # default=1 的关键参数。实操必须:Ctrl+Shift+F 粘贴正则 → 点 Find All 看高亮是否全为真注释 → 至少抽检开头、中间逻辑块、结尾配置段三处 → 删完立刻 Ctrl+Z 回退验证。跳过这步,恢复成本远高于预防时间。











