^\s*$ 不能直接清理 HTML 标签间空白,因其仅匹配整行纯空白,无法识别标签内(如<p> </p>)或同一行中标签间(如<div></div>后换行)的残留空白,且不处理不可见字符、自闭合标签及跨标签结构。

^\s*$ 是 Sublime 中清除 HTML 文件“视觉空行”的最稳写法,但必须配合关闭 . matches newline,且不能直接用于清理标签间残留空白——它只删整行,不管标签结构。
为什么 ^\s*$ 不能直接清理 HTML 标签间的空行
HTML 文件里常见的“空行”其实分两类:真·空行(如 <div></div> 后面跟的换行)和标签内残留空白(如 <p> </p> 中间那个空格)。^\s*$ 只匹配整行内容为纯空白的行,对 <div> </div> 这种嵌在一行里的空白完全无感。它删不掉 <div><p></p></div> 之间的换行,也删不掉 <span> </span> 里的空格。
- 它不跨标签边界,无法感知起始/结束标签之间是否“空”
- 它不处理自闭合标签(如
<br>)、条件注释(<!--[if]>...<![endif]-->)或<script>内部的换行 - 如果 HTML 是从微信公众号、邮件正文或爬虫抓取来的,往往混有不可见字符(如
\u200b、\uFEFF),默认\s不覆盖它们
先删空标签,再清空行:两步不能颠倒
想让 HTML 更干净,得先解决“空标签”,再处理“空行”。否则 <div></div> 删完只剩换行,^\s*$ 才能真正生效。
将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
- 第一步:勾选
. matches newline,查找<([a-zA-Z][^>]*)>[\s\S]*?</\1>,替换留空 —— 这能匹配并删除成对空标签(含换行、空格、制表符) - 第二步:**务必取消勾选**
. matches newline,再用^\s*$替换留空 —— 此时它才安全,不会跨行误吞内容 - 注意顺序:如果先跑
^\s*$,空标签还在,中间的换行被删了,但标签本身没动,后续再删空标签时正则可能因格式错乱而漏匹配
中文/富文本 HTML 中的伪空行怎么处理
从网页复制、公众号导出或 CMS 导出的 HTML 常含全角空格(\u3000)、不间断空格(\u00a0)甚至零宽空格(\u200b)。这些字符会让一行“看着空”,但 ^\s*$ 默认不识别。
立即学习“前端免费学习笔记(深入)”;
- 打开
View → Show White Space,确认是否有隐藏符号显示为·或→ - 若发现异常字符,把查找式换成:
^[\s\u200b\uFEFF\u00a0\u3000]*$ - 仍要确保
. matches newline未勾选,否则反斜杠序列可能被错误解析 - 大文件(>200KB)慎用全局替换;先用
Find All看匹配数,超 5000 行建议分段选中后操作
末尾空行和换行符不一致是最大坑点
Sublime 的 ^\s*$ 匹配的是“行内容”,不强制消耗换行符。这意味着:
- 如果文件以
\r\n\r\n(Windows 风格双空行)结尾,它能删掉倒数第二行,但最后一行若无换行符(即 EOF 前是空行),就匹配不到 - 文件换行符类型不统一(比如混合 LF/CRLF)时,
^\s*$仍有效,但^\s*\r?\n这类写法反而容易失效 - 删完后检查右下角状态栏显示的 Line Endings 类型;若为 CRLF,可先统一转成 LF(
File → Line Endings → Unix (LF)),再执行正则更稳妥 - 删完别忘了补结尾换行:按
Ctrl+Shift+P输入Insert Final Newline,避免 Git 提示 “no newline at end of file”


















