\]\*> 是 Sublime 中唯一能稳定删除所有单行 HTML 标签的正则,不跨行、不误删属性值中的 < 或 >,但删后文本粘连,且对 <script> 和 <style> 块无效。

]*> 是 Sublime 里唯一能稳定删掉所有单行 HTML 标签(包括 <div>、</p>、<img src="">)的正则,它不跨行、不误吞属性值里的 < 或 >,但删完后文本会粘连,且对 <script> 和 <style> 块完全无感。
为什么不用 <.*?>?
这个写法看着简单,实际在 Sublime 的 PCRE 引擎里问题一堆:
-
<.*?>默认不跨行,遇到<div>\nHello</div>就断成两截,只删开头不删结尾 - 它无法识别引号边界,会把
<script>console.log('<div>')里的字符串也当标签删掉 - 遇上
alt="A > B"这种含>的属性值,.*?会在第一个>就收手,导致标签残留 - 未勾选右下角
.*图标时,整个表达式被当作文本字面量,根本不会执行正则匹配
怎么安全执行 ]*> 替换?
这是真正可落地的操作链,漏一步就白干:
- 确保右下角状态栏的
.*图标已点亮(启用正则),但\n图标必须关闭(禁用.匹配换行符) - 查找框填:
]*>,替换框彻底留空(别填\n、空格或不可见字符) - 先点 Find All 看匹配数是否合理——如果文件有 200 行却只匹配出 5 个标签,大概率是
\n图标误开了 - 确认无误后点 Replace All,一次清掉所有开始/结束/自闭合标签
删完标签后文本粘连、空行乱飞怎么办?
这不是正则错了,是 HTML 语义剥离后的必然结果。原始 <p>标题</p><div>内容</div> 删完只剩“标题内容”,中间没换行也没空格。得补三步:
立即学习“前端免费学习笔记(深入)”;
- 先统一换行符:查找
(?:\r\n|\r|\n)+→ 替换为\n(解决 Windows/Linux 换行不一致) - 再还原块级语义:查找
<p>|<div>|<h[1-6]>|<li>→ 替换为\n;再查</p>|</div>|</h[1-6]>|</li>→ 替换为\n(注意顺序,避免嵌套干扰) - 最后清空行:关闭
\n图标,查找^\s*$→ 替换框留空(删掉带空格、Tab、甚至全角空格的伪空行)
遇到 <script> 或 <style> 怎么办?
]*> 对它们完全无效,且会误删里面的内容。Sublime 没有 HTML 解析器,不存在“自动跳过”的能力,必须人工干预:
- 手动折叠:按
Ctrl+Shift+P→ 输入Fold Tags,选中所有<script>和<style>块并折叠,再运行]*> - 或反选操作:用鼠标或
Ctrl+D选中全部<script>...</script>和<style>...</style>,按Ctrl+Shift+P→Selection: Invert Selection,再执行替换 - 千万别指望一条正则通吃——如果文件来自微信公众号、邮件正文或爬虫抓取,且体积超 200KB,建议直接切到
html2text或BeautifulSoup处理,正则只是临时救急手段
真正容易被忽略的是:删完后文本可能缺换行符,尤其末尾。Sublime 不保证文件以 \n 结尾,而很多工具(比如 Python 脚本、CI 流水线)要求 POSIX 兼容。删完记得检查最后一行是否高亮显示,必要时手动补一个换行,或运行 Ctrl+Shift+P → Insert Final Newline。



















