删除注释需分步:先用/*[\s\s]*?*/删块注释(须勾选“. matches newline”),再用^\s(?://|#).$删行首注释;不同语言需匹配对应语法,操作前必须预览并人工抽检。

先删 /* */ 块注释,必须勾选 “. matches newline”
块注释跨行时,/\*[\s\S]*?\*/ 是唯一能稳定匹配的写法。不勾选 “. matches newline”,正则只会停在单行内,漏掉真正多行的 /* 注释。注意 [\s\S] 比 . 更可靠——它显式覆盖所有字符(包括换行符),而 . 默认不匹配换行。别用 /\*.*?\*/,贪婪或非贪婪都容易从第一个 /* 一路吃到文件末尾最后一个 */,中间吞掉函数甚至整个类。
再删 // 或 # 行注释,用锚点限制位置
直接搜 //.*$ 或 #.*$ 很危险:会把 http://example.com、url#anchor 一起干掉。稳妥做法是加行首/空白约束:^\s*(?://|#).*$。这个表达式只匹配行首或缩进后紧跟的注释标记,避开字符串和 URL。但要注意:它不处理行中注释(如 int x = 1; // init),若需保留代码只删行尾注释,得改用 \s+(?://|#).*$ 并手动确认每处替换。
不同语言必须分开关联语法,不能混用同一正则
Python 的三引号字符串 """...""" 不会被 /\*.*?\*/ 匹配,但若误设语法为 Plain Text,Sublime 就不会高亮识别其结构,后续正则更易误伤。操作前务必检查右下角状态栏语言名,或用 Ctrl+Shift+P → Set Syntax 显式指定。例如处理 .py 文件,块注释应换用 """[\s\S]*?""" 或 '''[\s\S]*?''';处理 .html 则得另配 <!--[\s\S]*?-->。没有万能正则,强行通用等于主动埋雷。
永远不要跳过“查找全部”预览和人工抽检
正则删注释不是无状态替换。即使用了最稳妥的表达式,仍可能误删字符串里的 /*、模板字面量中的 //,或配置文件里带 # 的关键参数(如 # default=1)。实操必须:先按 Ctrl+Shift+F 粘贴正则,看匹配项是否全为真注释;再打开 Ctrl+H,点 Find All 高亮所有命中位置;最后至少抽检三处:开头、中间逻辑块、结尾配置段。删完立刻 Ctrl+Z 回退验证,比事后恢复快得多。











