Javascript 从HTML字符串中解析所有URL的最佳方法是什么?

Javascript 从HTML字符串中解析所有URL的最佳方法是什么?,javascript,regex,node.js,Javascript,Regex,Node.js,在接下来的几周里,为了好玩,我正在Node中编写一个网络爬虫。在我的原型中,我使用jsdom对页面进行jquery,然后搜索所有锚并将href添加到我的爬网列表中。我意识到,如果我只是从源代码中解析任何URL(例如文本中的URL),我可能会找到更多的URL。我想知道是否有好的javascript库可以使用regex或其他方式来实现这一点 作为旁注:这是个坏主意吗 更新: 虽然我最初选择了下面克里斯的答案,但事实证明,我有点高兴。不幸的是,我最终没有使用node.io。我发现它有点臃肿,它并没有真

在接下来的几周里,为了好玩,我正在Node中编写一个网络爬虫。在我的原型中,我使用jsdom对页面进行jquery,然后搜索所有锚并将
href
添加到我的爬网列表中。我意识到,如果我只是从源代码中解析任何URL(例如文本中的URL),我可能会找到更多的URL。我想知道是否有好的javascript库可以使用regex或其他方式来实现这一点

作为旁注:这是个坏主意吗

更新:


虽然我最初选择了下面克里斯的答案,但事实证明,我有点高兴。不幸的是,我最终没有使用node.io。我发现它有点臃肿,它并没有真正关注我试图做的事情。目前,我正在使用soupselect+htmlparser获取页面上任何锚的href值,目前我对这个解决方案感到满意。

在查找URL时,我使用以下正则表达式:
/(https?:\/\/)([^.\/]+(?:\..^.\/]+)(\/.*)(\/.*/

然后就有了子模式:

  • 协议
  • 领域
  • 路径
  • 不确定它对爬虫程序的效果如何,但我从未失望过。

    看看,它是node.js的一个优秀的抓取和处理框架


    或者,它也可以用来解析和操作来自节点的HTML文档。

    这不会完全忽略任何非绝对URL吗?正如我所说,不确定它对爬虫程序的效果如何。但我认为文本中的大多数URL都是绝对的。既然这就是问题所在,我想没问题。至于ftp,这不是我以前在URL中使用过的东西,所以我没有包括它。将
    https?
    替换为
    (?:https?| ftp)
    就可以了。@pst,我不想解析HTML(已经有很多工具可以这样做了)。我正在尝试从一个字符串中提取URLHTML@pst读这本书。很有启发性。事实上,如您所示,如果您从DOM中提取URL,您可能会找到更多URL。这是因为许多网站试图混淆其代码并创建动态链接。通常,当您执行类似的操作时,您需要使用Perl或其他服务器端语言来执行某种爬行。推荐node.io的奖励积分。谢谢你,克里斯!