不能直接用正则“一键”安全删除所有HTML标签,因正则无法正确处理注释、脚本、CDATA、自闭合标签及嵌套结构,易漏删、误删或卡死;可靠做法是分层处理:先剥离script/style内容,再清除标签,最后清理空白。

能删,但不能靠一条正则“一键”安全搞定所有 HTML 标签——尤其当文档含注释、脚本、CDATA、自闭合标签或嵌套结构时,正则会漏删、误删或卡死。真正可靠的做法是分层处理:先剥离脚本/样式内容,再清除标签,最后清理多余空白。
为什么 <.></.> 不能直接用
这个表达式看似简洁,实际问题一堆:
-
<.></.>会跨标签匹配,比如<div>hello</div>中的<div>hello</div>可能被当成一个整体,但遇到<script>console.log('<div>');就彻底崩坏 - 它不识别 HTML 注释
<!-- ... -->,可能把-->当成标签结尾,导致替换错位 - 对
<br />、<img src="x">这类无闭合标签也容易漏掉末尾斜杠或引号干扰 - Sublime 默认
.不匹配换行符,除非勾选「.matches newline」,否则多行标签(如带缩进的<pre>)直接失效
<[^>]*> 是更稳妥的起点
这个写法限制了匹配范围:只找以 < 开头、紧接着非 > 字符、以 > 结尾的片段,基本覆盖标准开始/结束/自闭合标签,且不会跨行乱吞。
- 查找:
<[^>]*> - 替换:留空
- 务必勾选右下角的
.*(启用正则)和.matches newline(让.能跨行) - 先按
Alt+Enter看Find All高亮是否全是标签——如果高亮里出现<!--或<script,说明你还得前置处理
必须提前剥离 <script> 和 <style> 内容
否则它们内部的 < 和 > 会被误当作标签边界,导致提取出乱码或截断文本。
使用 PptxGenJS 和 Python 解析,将结构化的 HTML/CSS 幻灯片内容转换为原生、可编辑的 PowerPoint(.pptx)演示文稿。
立即学习“前端免费学习笔记(深入)”;
- 先搜索:
<script[^>]*>[\s\S]*?</script>,替换为空(注意勾选.matches newline) - 再搜索:
<style[^>]*>[\s\S]*?</style>,同样替换为空 - 这两步做完,再跑
<[^>]*>才相对干净 - 如果文件含 JSX 或 Vue 模板,还得额外处理
<template>和<script setup>块,正则已力不从心,建议手动折叠后跳过
删完标签后,别忘了清理残留空白
HTML 标签删掉后,常留下大量空行、缩进和连续空格,影响可读性。
- 删空行:
^\s*$→ 替换为空(需勾选(?m)多行模式,或点右下角 ↩ 图标) - 压缩连续空格/制表符:
[ \t]+→ 替换为单个空格 - 清理行首行尾空白:
^\s+|\s+$→ 替换为空(同样要(?m)) - 这些操作顺序不能反:先清空行,再压空格,否则空行里的空格会干扰判断
最易被忽略的是编码与 Unicode 兼容性——如果 HTML 含中文属性值或实体字符(如 ),<[^>]*> 仍能匹配标签,但实体不会自动解码。真要纯文本,得另走解析器路线;仅靠 Sublime 正则,就默认它只是“去标签”,不是“转义还原”。


















