不推荐用正则提取 html 中的 标签 href 属性,因其无法可靠处理嵌套、引号、转义等边界情况;✅ 推荐用原生 dom 解析(如 document.createelement + queryselectorall),可自动容错并返回绝对 url;⚠️ 正则仅限简单可控场景,存在诸多局限;? 进阶推荐 cheerio、parse5 等专用 html 解析库。

不推荐用正则提取 HTML 中的 @#@#@#@#@#@#@#@#@#@0 中的 <b></b> 会破坏匹配)。
? 进阶替代:使用专用 HTML 解析库
Node.js 环境推荐:
-
cheerio(轻量,jQuery 风格):$('a[href]').map((_, el) => $(el).attr('href')).get(); -
parse5或htmlparser2(更底层,适合流式/大文件)。
这些库能正确处理嵌套、命名空间、实体编码(如 &)、自定义元素等真实 HTML 变体。
本质上,HTML 不是正则友好型语言。用对工具,省去调试诡异 bug 的时间。
function extractHrefs(htmlStr) {
const div = document.createElement('div');
div.innerHTML = htmlStr; // 自动解析,浏览器级容错
return Array.from(div.querySelectorAll('a[href]'))
.map(el => el.href); // .href 返回绝对 URL(含协议/域名补全)
}
/<a>]*href\s*=\s*["']([^"']*)["'][^>]*>/gi</a>
const html = '<a href="https://www.php.cn/link/b05edd78c294dcf6d960190bf5bde635">Link</a> <a href="%5C'/page%5C'">Local</a>'; const matches = html.match(/<a>]*href\s*=\s*["']([^"']*)["'][^>]*>/gi); const hrefs = matches?.map(m => m.match(/href\s*=\s*["']([^"']*)["']/i)?.[1]) || [];</a>
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











