【问题标题】:Javascript regular expression questionJavascript正则表达式问题
【发布时间】:2011-01-10 01:38:32
【问题描述】:

我正在使用 javascript 正则表达式来执行以下操作:

我将页面的 html 内容保存在一个字符串中,我想匹配页面上的所有 URL。

例如,如果文档包含--

<script src = "http://www.a.com">
<a href="http://www.b.com">
<a href= "http://www.c.com">
<a href ="http://www.d.com">

我希望比赛是--

http://www.a.com
http://www.b.com
http://www.c.com
http://www.d.com

任何帮助将不胜感激,谢谢!

【问题讨论】:

  • 你的网址真的那么简单吗,还是会包含参数或更长的路径?
  • @Hello71 我已经按照你的要求做了,我已经用 HTML5 Lib 解析了 HTML,我已经获取了所有的链接,我已经修复了所有的编码错误,所有未知的不支持的 unicode 符号,最后经过数周的工作,从该 html 中获得了这些链接。它值得吗?也许。增加的复杂性值得吗?不,不是,解析 HTML 比你想象的要困难得多,HTML 可以包含其他类型的内容并且非常复杂,正则表达式匹配链接实际上可能是更好的答案......或者自定义解析器(我也试过,非常适合长文本)。

标签: javascript html regex string


【解决方案1】:

John Gruber 在他的网站上为 URL 提供了一个出色的正则表达式,Daring Fireball:http://daringfireball.net/2010/07/improved_regex_for_matching_urls

你可以这样实现它:

function regex(url) {
    var regex = /(?i)\b((?:https?://|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/
    return regex.test(url);
}

【讨论】:

  • 我得到一个错误的错误 | 与该代码 - 这个要点很好用:gist.github.com/1033143。它使用相同的正则表达式。
  • 匹配不完全相同的链接/锚的 URL
【解决方案2】:
function isUrl(url) {
    var regexp = /(http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/
    return regexp.test(url);
}

它有点通用,但您可以根据需要对其进行修改。

【讨论】:

    猜你喜欢
    • 2011-02-05
    • 1970-01-01
    • 2019-05-09
    • 2011-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多