Sublime Text 清除网页注释须分三步:先用<!--[\s\S]*?-->删HTML注释(需启用. matches newline),再用/\*[\s\S]*?\*/删JS/CSS块注释(需设对语法),最后用^\s*(?://).*$删行注释(需关闭. matches newline)。

Sublime Text 无法安全“一键清除网页源码中的无用注释”,必须分三类正则分别处理 <!-- -->、/* */ 和 //,且 <!-- --> 必须优先删除,否则其内部的 /* 或 // 会干扰后续匹配。
先删 HTML 注释:<!--[\s\S]*?-->(必须启用 . matches newline)
HTML 的 <!-- --> 可跨多行、可嵌套字符串(如 <!-- <div class="/* not a comment */"> -->),但 Sublime 不解析语法,只靠字符匹配。不启用右下角 .\n 图标,[\s\S] 就不生效,整段注释会被跳过。
-
<!--[\s\S]*?-->是唯一可靠写法:[\s\S]显式覆盖换行符,?防止从第一个<!--吞到文件末尾最后一个--> - 别用
<!--.*?-->:默认.不匹配换行,90% 的真实 HTML 注释都删不掉 - 删完立刻按
Ctrl+Shift+F→ 粘贴该正则 → 点Find All,重点抽检:开头的 license 注释、<script>标签内的注释块、结尾的调试注释
再删 JS/CSS 中的 /* */ 块注释(同样启用 . matches newline)
网页源码里 <script> 和 <style> 标签内是 JS/CSS 语法,/* */ 写法虽与 C 类似,但若文件语法被设为 HTML,Sublime 不会高亮识别字符串边界——const s = "<!-- not a comment -->"; 里的 <!-- 会被上一步漏掉,但本步的 /\*[\s\S]*?\*/ 若误扫进来,就真成灾难。
- 确保当前视图语法正确:右下角点语言名 → 选
JavaScript或CSS;或按Ctrl+Shift+P→Set Syntax: JavaScript - 用
/\*[\s\S]*?\*/,不是/\*.*?\*/—— 后者在未启用.\n时失效,在启用后又可能贪婪吞掉/\* comment */ const x = 1;中的代码 - 注意:JS 模板字符串(
`/* not a comment */`)不会被匹配,安全;但正则字面量如/a\/b/中的/可能触发误匹配,无法靠正则规避
最后删 JS 行内注释:^\s*(?://).*$(必须关闭 . matches newline)
这一步只针对 <script> 块内的 //,不能用于 HTML 属性或文本节点。用 //.*$ 全局扫会干掉 src="https://a.com//b.js" 或 data-url="http://" 里的 //。
-
^\s*(?://).*$锚定行首:^+\s*(允许缩进)+//+.*$,避开所有 URL 和属性值 - 执行前务必关闭右下角
.\n图标——否则.*$可能跨行吞掉下一行代码 - 它不处理行尾注释(如
let x = 1; // init),想删这类需改用\s+(?://).*$并手动逐个确认,否则url = "https://a.com//b"; // comment会变url = "https://a.com"
真正容易被忽略的是:删完后 <script> 和 <style> 标签内容可能错位
比如原先是:
<script> /* init */ console.log(1); </script>
删完变成:
<script> <p>console.log(1); </script>
中间空行塌陷,导致标签内首行缩进丢失、格式混乱。这不是正则问题,而是替换后没保留原始换行结构。人工抽检时得看三处:标签开头空行、逻辑语句间空行、标签闭合前空行——这些位置删注释后是否意外合并或错位,比删没删干净更难回溯。

















