我需要一个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
我怎么能完成两个?
答案 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+