正则匹配HTML标签在嵌套不深时可用.*?非贪婪模式,如<p>(.*?)</p>提取纯文本,但无法可靠处理嵌套、换行、注释、CDATA及浏览器容错逻辑,仅适合可控场景的预处理。

直接用正则模式匹配标签结构,比手动点选或插件更稳、更快,且能跨文件批量处理。
用 .*? 非贪婪匹配标签内容
HTML 标签嵌套不深时,.*? 是最简可靠的写法。它避免了 .* 跨标签误吞内容的问题。
- 查找所有
<p>标签内的纯文本(不含子标签):<p>(.*?)</p> - 替换为加包裹的 Markdown 风格:
**$1** - 若要保留换行,需在查找中显式包含
\n,比如<div>([\s\S]*?)</div>([\s\S]代替.*?才能跨行) -
.*?不匹配换行符,这是默认行为;强行用(?s).*?开启单行模式虽可行,但易误匹配到下一个闭合标签,慎用
用捕获组精准提取并重排属性或内容
当需要交换属性顺序、补全缺失属性或提取值做二次处理时,必须靠括号捕获组,不能只靠模糊匹配。
- 把
<img src="a.jpg" alt="">补上缺失的width:<img (src="[^"]*")([^>]*)/?>→<img $1 width="300"$2/> - 提取所有
href值并转成注释:<a href="([^"]*)"[^>]*>(.*?)</a>→<!-- $1 -->$2<!-- /$1 --> - 注意:属性顺序不固定时,别硬写
src=".*?" alt=".*?",应拆成独立捕获,如src="([^"]*)"[^>]*alt="([^"]*)"
替换后标签闭合错乱?检查引号和斜杠转义
常见错误不是正则写错,而是 HTML 字符本身被当成了正则元字符,或替换文本里漏了关键符号。
立即学习“前端免费学习笔记(深入)”;
- 查找
<input type="text" name="user">,必须写成<input type="text" name="user">—— 尖括号不用转义,但双引号内含双引号时得用"或改用单引号 - 自闭合标签如
<br>、<img>在替换时容易漏掉末尾/,导致 HTML 验证失败;建议统一写成<br/>形式并在查找中明确匹配<br[^>]*/?> - 如果替换结果里出现
这类实体,说明你误启用了 HTML 实体编码,关掉编辑器的「Auto encode HTML entities」选项(如有),或确认文件编码是 UTF-8(右下角显示)
全局替换前必须锁死 Where 范围
在项目里搜 <div> 却把 node_modules 里的框架源码也改了,不是手滑,是 Where 没设对。
-
Where留空 = 只搜当前已打开的文件标签,不是整个项目 - 真正搜整个项目,填
.(单个英文点);只搜 HTML 文件,填*.html, *.htm - 排除干扰目录:
., -node_modules/, -dist/, -build/(逗号分隔,斜杠方向统一用/,Windows 上也一样) - 执行
Replace All后,Sublime 不自动保存——必须按Ctrl+K松开再按Ctrl+B,否则关掉标签页就丢修改
最常被忽略的是:正则里没转义字面量 < 和 > 其实没问题,但 "、'、(、)、[、] 在属性值或标签名里出现时,必须按需转义;还有,所有替换操作都没有撤销历史,改之前 git commit 是底线操作。



















