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

直接用正则模式匹配标签结构,比手动点选或插件更稳、更快,且能跨文件批量处理。
用 .*? 非贪婪匹配标签内容
HTML 标签嵌套不深时,.*? 是最简可靠的写法。它避免了 .* 跨标签误吞内容的问题。
- 查找所有
<p></p>标签内的纯文本(不含子标签):<p>(.*?)</p><div class="aritcle_card flexRow artxards"> <div class="artcardd flexRow"> <a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill5806" title="html-deploy"><img src="https://img.php.cn/upload/skill/000/000/081/179066538882434.jpg" alt="html-deploy" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a> <div class="aritcle_card_info flexColumn"> <a rel="nofollow" href="/xiazai/skill5806" title="html-deploy" class="overflowclass">html-deploy</a> <p class="overflowclass">使用 htmlcode.fun 将 HTML 内容或文件部署到网页,适用于用户要求“部署到网页”“托管此 HTML”“生成此前端...的实时链接”等场景。</p> </div> <a rel="nofollow" href="/xiazai/skill5806" title="html-deploy" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a> </div> </div> - 替换为加包裹的 Markdown 风格:
**$1** - 若要保留换行,需在查找中显式包含
\n,比如<div>([\s\S]*?)</div>([\s\S]代替.*?才能跨行) -
.*?不匹配换行符,这是默认行为;强行用(?s).*?开启单行模式虽可行,但易误匹配到下一个闭合标签,慎用
用捕获组精准提取并重排属性或内容
当需要交换属性顺序、补全缺失属性或提取值做二次处理时,必须靠括号捕获组,不能只靠模糊匹配。
- 把
<img src="a.jpg" alt="">补上缺失的width:<img>]*)/?>→<img style="max-width:90%"> - 提取所有
href值并转成注释:@#@#@#@#@#@#@#@#@#@0→<!-- $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> 却把 <code>node_modules 里的框架源码也改了,不是手滑,是 Where 没设对。
-
Where留空 = 只搜当前已打开的文件标签,不是整个项目 - 真正搜整个项目,填
.(单个英文点);只搜 HTML 文件,填*.html, *.htm - 排除干扰目录:
., -node_modules/, -dist/, -build/(逗号分隔,斜杠方向统一用/,Windows 上也一样) - 执行
Replace All后,Sublime 不自动保存——必须按Ctrl+K松开再按Ctrl+B,否则关掉标签页就丢修改
最常被忽略的是:正则里没转义字面量 和 <code>> 其实没问题,但 "、'、(、)、[、] 在属性值或标签名里出现时,必须按需转义;还有,所有替换操作都没有撤销历史,改之前 git commit 是底线操作。










