Sublime Text 提取 HTML 标签内容靠正则匹配,需锚定边界、折叠干扰块、慎用量词;安全提取 文本用 ]*>([^

Sublime Text 不能解析 HTML,所有“提取标签内容”本质上是正则文本匹配,靠的是精准控制边界和规避干扰块;写错一个量词或漏掉折叠步骤,结果就混进 <script> 里的字符串、注释里的假链接,甚至跨标签吞掉整段结构。</script>
怎么安全提取 <a></a> 标签的文本内容(不是 href)
目标是拿到 <a href="https://a.com">点击这里</a> 中的“点击这里”,而不是 URL。关键在锚定标签边界,拒绝跨行和嵌套干扰:
- 用
<a>]*>([^</a>:匹配开标签(允许属性)、捕获中间非字符、闭合标签 - 必须勾选
.*(正则模式)和. matches newline(如果文本有换行) - 不推荐
<a.>(.*?)</a.>:遇到<a title=">">xxx</a>就会提前闭合,捕获错乱 - Find All 后,高亮的是整个
<a>...</a>,但复制出来的是$1内容——前提是用了括号捕获
为什么 href=(["'])([^"']*)\1 提取 URL 时总多出引号或抽到 javascript:void(0)
这不是正则本身的问题,是 Sublime 对文本无上下文感知,<script></script> 和 <!-- --> 里的 href= 它也照抓不误:
- 先按
Ctrl+Shift+P输入Fold Tags,折叠所有<script></script>、<style></style>、<noscript></noscript>块(折叠后不参与查找) - 再用
<!--[\s\S]*?-->查找全部注释,按Esc跳过,不替换也不选中 - 替换后若还有无效值,补一轮过滤:
^(?!https?://|#|javascript:|mailto:)+ 勾选^$ matches newline,删掉非外链行 - 注意:这个正则不匹配 HTML5 无引号写法(如
href=/path),强行兼容会大幅增加误匹配风险
src、data-src、content 等其他属性怎么一并提取
可以合并写,但分组编号会变,容易拿错位置;更稳的做法是统一结构、明确捕获位:
- 多属性通用正则:
(href|src|data-src|content)=(["'])([^"']*)\2,URL 在$3,不是$2 - 想只提
src且排除 base64 图片?加协议约束:src=(["'])(https?://|//)[^"']*\1 -
srcset是逗号分隔列表,不能直接套用;先用srcset\s*=\s*["']([^"']*)["']提整段,再手动按逗号拆分 - 大文件(>5MB)务必先删或折叠
<script></script>块,否则匹配卡顿、结果错位
最常被忽略的一点:Sublime 的 Find in Files(Ctrl+Shift+F)不支持 $1 引用,所有“提取”操作都得在单文件 Replace 面板里完成,再复制结果页文本手动整理——它没有真正的导出功能,也没有去重或转数组逻辑。

















