正则表达式查找文本块中的URL(Javascript)

时间:2009-11-18 14:51:49

标签: javascript regex dom

我需要一个Javascript正则表达式来扫描纯文本块并返回带有URL作为链接的文本。

这就是我所拥有的:

findLinks: function(s) {
          var hlink = /\s(ht|f)tp:\/\/([^ \,\;\:\!\)\(\"\'\\f\n\r\t\v])+/g;
          return (s.replace(hlink, function($0, $1, $2) {
              s = $0.substring(1, $0.length);
              while (s.length > 0 && s.charAt(s.length - 1) == '.') s = s.substring(0, s.length - 1);

              return ' ' + s + '';
          }));
      }

问题是它只会匹配 http://www.google.com 而不是 google.com/adsense

我怎么能完成两个?

4 个答案:

答案 0 :(得分:6)

我一直用这个作为参考。这家伙有8个你应该知道的正则表达式。

http://net.tutsplus.com/tutorials/other/8-regular-expressions-you-should-know/

以下是他用来查找网址

的内容
/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/ 

他还打破了每个部分的作用。对于学习正则表达式非常有用,而不仅仅是找到一个你不理解的原因的答案。

答案 1 :(得分:3)

这是一项非常重要的任务。要根据相关RFC匹配任何有效的URI,您需要一个具有纪念意义的复杂正则表达式,即使这样也不会过滤掉包含无效顶级域名的URI(例如http://brussels.sprout/)。所以,你必须妥协。确定哪些对您很重要(例如:假阳性或漏报是否更可接受?您是否希望将顶级域限制为仅限于当前存在的域?您是否允许匹配URI中的非拉丁字符?)您应该决定什么需要你使用正则表达式进行相应的设计,而不是盲目地从网上复制和粘贴一个例子。

答案 2 :(得分:2)

您可以将协议部分设为可选:

/\s((ht|f)tp:\/\/)?([^ \,\;\:\!\)\(\"\'\\f\n\r\t\v])+/g

答案 3 :(得分:0)

试试这个(适用于您的示例文本)

\S+\.\S+