Sublime Text中唯一可靠的删HTML注释正则是<!--[\s\S]*?-->,需启用. matches newline;它无法识别字符串内或script/style标签内的<!--,且不处理JSP、Vue等模板注释,删后可能丢失换行。

Sublime Text 里没有真正安全的“一键删 HTML 注释”功能,<!--[\s\S]*?--> 是唯一能跨行匹配的写法,但必须勾选 . matches newline,否则只扫单行,漏掉全部真实注释。
为什么 <!--.*?--> 默认不工作
默认状态下,正则中的 . 不匹配换行符,而 HTML 注释几乎都跨行。比如:
<!-- 这是一个多行注释 包含缩进和空行 -->
用 <!--.*?--> 只会停在第一行末尾,根本捕获不到 -->。必须启用右下角那个 .\n 图标(即 . matches newline),才能让 [\s\S] 覆盖所有字符。
-
<!--[\s\S]*?-->是唯一稳定写法,[\s\S]显式包含换行,比.可靠 - 非贪婪
?很关键:没它会从第一个<!--一路吃到文件末尾最后一个--> - 该正则无法识别字符串里的
<!--,例如const html = "<!-- not a comment -->";会被误删
怎么避免误删 script/style 里的注释内容
HTML 文件中,<script> 和 <style> 标签内部的 <!-- 往往是为兼容旧浏览器写的包裹语法(如 <script><!-- ... //--></script>),不是真注释。直接删会破坏 JS/CSS 逻辑。
立即学习“前端免费学习笔记(深入)”;
- 先手动折叠或删除
<script>[\s\S]*?</script>和<style>[\s\S]*?</style>块(Ctrl+Shift+P → Fold Tags) - 或者分两步:先用
<script>[\s\S]*?</script>和<style>[\s\S]*?</style>替换为空,再跑<!--[\s\S]*?--> - 别指望一个正则自动区分上下文——Sublime 不解析 DOM,纯靠字符匹配
不同 HTML 变体要小心这些边界情况
Vue/JSX 单文件组件、PHP 混排页、JSP 模板里,<!-- 可能出现在服务端代码块中(如 <%-- JSP 注释 --%>),也可能被当成客户端注释误删。
- 确认右下角状态栏显示的是
HTML,不是Plain Text或PHP;若显示不对,按 Ctrl+Shift+P →Set Syntax: HTML - 遇到
<!--[if IE]>这类条件注释,<!--[\s\S]*?-->会完整删掉,但这是预期行为——现代项目通常已不需要 - 模板引擎如 Jinja2 的
{# comment #}或 Vue 的<!--{{ expr }}-->不会被该正则匹配,需另写规则
最易被忽略的是:删完注释后,<p>文本</p><!-- comment --><div> 会变成 <p>文本</p><div>,中间无换行。这不是正则问题,而是你忘了注释原本承担了格式分隔作用——如果输出要给人读,得额外补 \n。



















