sublime 中安全提取 href 等 url 应用正则 href=(["'])([^"']*)\1,它通过捕获引号类型并强制闭合避免跨标签;需先手动折叠或删除 和注释块,再限定作用域(如仅选中 ),并注意文件编码转换。

Sublime 不能解析 HTML,但用正则批量提取 href、src 等属性里的 URL 是完全可行的——前提是避开 <script></script>、注释和不闭合引号这三类坑,否则匹配会跨标签或抽到伪链接。
怎么写一个安全的 href 链接提取正则
别用 href="(.*?)" 这种写法:它遇到换行、嵌套引号或注释就会崩,还可能吞掉后面标签的内容。
-
href=(["'])([^"']*)\1才是推荐模式:["']捕获开头引号类型,\1强制结尾用同一种引号闭合,[^"']*只匹配非引号字符,不会跨标签 - 这个正则默认不匹配 HTML5 无引号写法(如
href=/path),想支持就得加分支,但精度下降明显,一般不建议 - 如果要同时抓
src和data-url,可用(href|src|data-url)=(["'])([^"']*)\2,URL 在$3,不是$2 -
srcset是逗号分隔列表,不能直接套用;得先用srcset\s*=\s*["']([^"']*)["']匹配整段,再手动拆分
为什么抽出来一堆 javascript:void(0) 或相对路径?
这不是正则错了,是没过滤上下文。Sublime 只认纯文本,不管是不是在 <script></script> 里还是注释中。
- 先手动折叠或删掉
<script></script>和<!-- -->块(Ctrl+Shift+P→ 输入Fold Tags) - 用
<!--[\s\S]*?-->先全选注释内容,按Esc跳过不处理 - 替换后补一刀过滤:搜索
^(?!https?://|#|javascript:|mailto:),勾选^$ matches newline,把非外链行全删 - 想筛掉相对路径?在查找里加协议约束:
href=(["'])(https?://|//)[^"']*\1
大文件卡住、结果错位,问题出在哪
正则本身没问题,是作用域和性能设置被忽略了。
- 默认对整个文件生效。如果只想处理网页正文,先手动选中
再按Ctrl+H,面板左下角出现In Selection提示才安全 - 大文件(>5MB)建议先删掉
<script></script>、<style></style>、<noscript></noscript>块,再跑正则,速度提升明显 - 导出后粘贴到新文件出现乱码?大概率是源文件为 GBK 或 UTF-8 with BOM,而 Sublime 新建文件默认 UTF-8;保存前点右下角编码名 →
Convert to UTF-8
真正容易被忽略的是作用域控制和上下文清理——正则再准,也救不了没删注释、没锁范围、没处理编码的那几秒疏忽。











