最稳妥的单行HTML标签清除正则为<[^>]*>,它通过否定字符集匹配尖括号内不含>的片段,避免误删属性值中的<,但不处理换行、script/style内伪标签、注释及CDATA。

<[^>]*> 是 Sublime Text 里最稳妥的单行 HTML 标签清除正则,但别指望它能“一键”搞定所有场景——它不处理换行、不跳过 <script> 里的伪标签、也不识别注释和 CDATA。
Sublime 里该用哪个正则表达式
直接用 <[^>]*>,别用 <.*?> 或 <\/?.*?\/?>。
-
<[^>]*>靠否定字符集匹配「」结尾、中间不含「>」的片段,天然避开属性值里带<的情况(比如<img alt="A < B">) -
<.*?>在 Sublime 的 PCRE 引擎里跨行失效,且遇到<script>console.log('<div>')会把字符串里的<div>也干掉 -
<\/?.*?\/?>过度宽松,会误吞注释<!-- hello -->或 DOCTYPE
为什么 Replace All 后文本粘连或空行乱飞
删完标签只剩裸文本,原来靠 <p>、<br> 分隔的段落就挤成一团了。这不是正则错了,是语义丢失了。
- 先统一换行符:查
(?:\r\n|\r|\n)+→ 替换成\n,避免 CRLF/LF 混用 - 再补逻辑换行:对常见块级标签如
<p>、<div>、<h[1-6]>单独做一次替换,比如把<p>替换为\n,</p>也替换为\n - 最后清理空行:查
\n\s*\n→ 替换为\n\n,再手动删多余空行更可控
遇到 <script> 或 <style> 怎么办
<[^>]*> 会照删不误,导致 JS 字符串里的 <div> 被截断。真要保内容,得两步走:
立即学习“前端免费学习笔记(深入)”;
- 第一步:先把
<script[^>]*>[\s\S]*?<\/script>和<style[^>]*>[\s\S]*?<\/style>替换为空(注意勾选.*模式支持跨行) - 第二步:再跑
<[^>]*>删剩余标签 - 如果 HTML 里还有注释
<!--.*?-->或 CDATA,也得在第一步一并剔除,否则可能干扰后续匹配
什么时候不该用 Sublime 正则
当你面对的是爬虫抓取的邮件正文、微信公众号 HTML、或用户粘贴的富文本时,<[^>]*> 就只是个临时止血贴。
- 嵌套不规范(比如
<div><p>text</div></p>)会让正则漏删或错删 - 实体字符如
、不会被还原,结果里全是乱码符号 - 超过 500KB 的 HTML 文件,Sublime 可能卡死或丢数据——它不是 HTML 解析器,只是文本编辑器
真正要鲁棒提取,得切到浏览器环境用 textContent,或 Python 里上 BeautifulSoup;Sublime 正则只适合你确认结构干净、量小、且只要“差不多能看”的场景。



















