正则表达式:提取包含文本的URL

时间:2017-02-07 21:34:03

标签: regex

我试图从源代码中提取网址。源代码类似于以下

text text text<h4 class="a"><a href="http://site1.com/url/" onmousedown="return rwt(this,'','','','15',111','','0333','','',home)">...</a></h4>

我到目前为止所获得的是(?<=<h4\ class="a"><a\ href=")http://.*,但这仍然不是仅提取网址。我需要输出只有http://site1.com/url/

提前致谢!

2 个答案:

答案 0 :(得分:1)

就像评论一样,使用dom或xml / html解析器而不是正则表达式。在浏览器中,您可以使用javascript:

执行此操作

var s = `text text text<h4 class="a"><a href="http://site1.com/url/" onmousedown="return rwt(this,'','','','15',111','','0333','','',home)">...</a></h4>
`;

var e = document.createElement('div');
e.innerHTML = s;
Array.from(e.getElementsByTagName("a")).forEach(link => {
  console.log(link.href);
})

如果您不想在浏览器中执行此操作,则还有其他环境可用的html和xml解析器

答案 1 :(得分:0)

捕获组是为这样的任务设计的,虽然我同意使用正则表达式来解析HTML是不好的形式。如果您需要匹配的是您在此处提供的前缀和网址(并且您确保拥有格式良好的HTML(以及在任何显示的文本中正确转义的HTML))那么您可以使用正则表达式是:

/<h4 class="a"><a href="([^"]+)"/

https://regex101.com/r/skfhTm/1

第一个捕获组将包含URL。