最稳的链接提取正则为 href=(["'])([^"']*)\1,它通过捕获引号类型并强制同类型闭合来避免跨引号误匹配,兼容单双引号且拒绝贪婪;需用括号捕获url部分($2)才能复制纯链接,同时须预先折叠script/style块、过滤注释及无效协议前缀。

能,但必须手动控制匹配范围,否则容易抽到 script 里的假链接、注释里的字符串,甚至跨标签吃掉整段 HTML。
href=(["'])([^"']*)\1 是最稳的链接提取正则
这个模式能兼容单引号、双引号,且靠 \1 强制闭合,避免被换行或嵌套引号打断。比 href="(.+?)" 安全得多——后者遇到 href="foo" onclick="bar" 就会多抓一截。
-
(["'])捕获开头引号类型,\1确保结尾用同一种引号,不混用 -
([^"']*)匹配引号内任意非引号字符,拒绝贪婪跨行 - 不支持无引号 href(如
href=/path),HTML5 允许但太少见,强行兼容会增加误匹配风险
Find All 后复制出来的是“片段”,不是“整行”
点 Find All 后,Sublime 默认只选中匹配内容本身(比如 https://example.com),不带前后标签。这是优点,也是坑——如果你没写捕获组,复制出来的是整个 href="xxx",不是纯 URL。
- 必须用括号把目标包住,例如
href=(["'])([^"']*)\1→ 复制后得到的是$2对应内容 - 复制快捷键是
Ctrl+C(Windows/Linux)或Cmd+C(macOS),粘贴后每项自动换行 - 若结果里有空行或多余空格,后续用
^\s*$删除空行,^\s+|\s+$清理首尾空格
script 和注释里的 href 不是真链接,得先躲开
Sublime 不解析 DOM,它眼里只有文本。所以 <!-- href="fake.com" --> 或 var link = "href=real.com"; 都会被当真。
- 先按
Ctrl+Shift+P输入Fold Tags,折叠所有<script></script>和<style></style>块(折叠后它们不参与查找) - 再用
<!--[\s\S]*?-->查找全部注释,Ctrl+D跳过不替换 - 如果已抽完,可用第二轮正则过滤无效值:
^(?!#|javascript:|mailto:|tel:)留下真正可访问的协议前缀
src、data-src 这类属性要改正则,不能直接复用 href
现代网页把链接藏在各种属性里,src、data-url、content 都可能存 URL,但正则结构一样,只是关键字不同。
- 单独提取:把
href换成src,即src=(["'])([^"']*)\1 - 一次扫多个:用
(href|src|data-src)=(["'])([^"']*)\2,注意此时 URL 在$3,不是$2 - 别用
(href|src)=...加g标志——Sublime 不支持全局标志,靠Find All自动遍历
真正麻烦的不是写正则,而是判断哪些“href=”算链接、哪些只是字符串。每次提取前花 10 秒扫一眼源码结构,比后期清洗错误数据省半小时。











