regex 从字符串中提取所有链接

ltskdhd1  于 2023-02-17  发布在  其他
关注(0)|答案(5)|浏览(151)

我有一个javascript变量包含了一个页面的HTML源代码(不是当前页面的源代码),我需要从这个变量中提取所有链接。有什么线索,什么是最好的方法来做到这一点?
是否可以为变量中的HTML创建一个DOM,然后遍历它?

o7jaxewo

o7jaxewo1#

我不知道这是不是推荐的方法,但它确实有效:(仅限JavaScript)

var rawHTML = '<html><body><a href="foo">bar</a><a href="narf">zort</a></body></html>';

var doc = document.createElement("html");
doc.innerHTML = rawHTML;
var links = doc.getElementsByTagName("a")
var urls = [];

for (var i=0; i<links.length; i++) {
    urls.push(links[i].getAttribute("href"));
}
alert(urls)
mzsu5hc0

mzsu5hc02#

如果您使用jQuery,我相信您可以非常容易地:

var doc = $(rawHTML);
var links = $('a', doc);

http://docs.jquery.com/Core/jQuery#htmlownerDocument

gc0ot86w

gc0ot86w3#

这是有用的esepcially如果你需要替换链接...

var linkReg = /(<[Aa]\s(.*)<\/[Aa]>)/g;

var linksInText = text.match(linkReg);
uurv41yg

uurv41yg4#

如果你运行的是Firefox,你可以!它叫做DOMParser,看看吧:

DOMParser is mainly useful for applications and extensions based on Mozilla platform. While it's available to web pages, it's not part of any standard and level of support in other browsers is unknown.
1l5u6lss

1l5u6lss5#

如果您在浏览器上下文之外运行,并且不想拉取HTML解析器依赖项,这里有一个简单的方法:

var html = `
<html><body>
  <a href="https://example.com">Example</a>
  <p>text</p>
  <a download href='./doc.pdf'>Download</a>
</body></html>`

var anchors = /<a\s[^>]*?href=(["']?)([^\s]+?)\1[^>]*?>/ig;
var links = [];
html.replace(anchors, function (_anchor, _quote, url) {
  links.push(url);
});

console.log(links);

相关问题