正则表达式可快速剥离html标签提取纯文本,但仅适用于结构简单、可控场景;它不解析dom,无法处理嵌套错误、自闭合标签异常或完整html实体解码,故不能替代专业html解析器。

正则表达式可以快速剥离 HTML 标签提取纯文本,但只适用于结构简单、可控的场景;它不解析 DOM,无法处理嵌套错误、自闭合标签异常或实体编码转换,因此不能替代真正的 HTML 解析器。
基础正则:一键移除所有标签
最简写法://g 或 /]*>/g。前者匹配开标签、闭标签和自闭合标签(如 <img>),后者更严格,只匹配尖括号包裹的内容。在 JavaScript 中直接使用:
htmlString.replace(/]*>/g, '')- 后续建议加空格规范化:
.replace(/s+/g, ' ').trim(),避免多个换行/空格连成一团
进阶正则:过滤干扰内容再提取
真实 HTML 常含 script、style、注释、CDATA 和 HTML 实体(如 &、 )。仅删标签会残留乱码或空白。推荐分步处理:
- 先清除
<script>...</script>和<style>...</style>块(用非贪婪匹配<script>[\s\S]*?<\/script></script>) - 再删注释
<!--.*?-->和 CDATA 段 - 最后统一删标签,并用字典映射还原常见实体(如把
→ 空格,<→)
Python 中的实用封装示例
Python 可用 re 模块组合多条规则,比单行正则更鲁棒:
- 用
re.sub(r'<script>]*>.*?</script>', '', html, flags=re.DOTALL | re.IGNORECASE)清脚本 - 用
re.sub(r'<!--.*?-->', '', html, flags=re.DOTALL)清注释 - 主标签清理用
re.sub(r']+>', '', html) - 实体替换建议单独函数处理,例如将
、统一转为空格
什么情况下别硬扛正则
当遇到以下情况,正则就该让位给专业解析器:
- HTML 结构混乱(如未闭合的
<p></p>、错位嵌套) - 需要保留段落语义(比如把
<p></p>换成换行,<br>也换行) - 目标文本被包裹在复杂层级中(如
<div><span><b>文字</b></span></div>),且位置不固定 - 需解码全部 HTML 实体(正则只能覆盖常见项,全量支持靠
html.unescape()更稳)
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











