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

在文本块中查找URL的正则表达式(Javascript),javascript,regex,dom,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.le

我需要一个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 + ''; })); } FindLink:函数{ var hlink=/\s(ht | f)tp:\/\/([^\,\;\:\!\)\(\“\'\\f\n\r\t\v])+/g; 返回(s.replace(hlink,函数($0,$1,$2){ s=$0.子字符串(1,$0.长度); 而(s.length>0&&s.charAt(s.length-1)='.')s=s.substring(0,s.length-1); 返回“+s+”; })); } 问题是它将只匹配 而不是google.com/adsense


如何实现这两个目标?

您可以选择协议部分:

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

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


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

下面是他用来查找URL的

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

他还分解了每个部分的功能。这对于学习正则表达式非常有用,而不仅仅是因为你不理解的原因而得到一个有效的答案。

这是一项非常重要的任务。要匹配任何根据相关RFC有效的URI,您需要一个极其复杂的正则表达式,即使如此,也不会过滤出具有无效顶级域(例如)的URI。所以,你必须妥协。确定对您来说什么是重要的(例如:误报或误报更容易接受吗?是否要将顶级域限制为当前存在的域?是否允许在匹配的URI中使用非拉丁字符?)你应该决定你需要正则表达式做什么,并据此进行设计,而不是盲目地从web上复制和粘贴一个示例。

他的电子邮件正则表达式缺少有效字符,比如在@signEmail与正则表达式验证之前的部分中的+号不是一件小事。我认为这更多是为了学习,而不是在硬核生产环境中使用。然而,URL模式对我来说效果很好。很明显,如果你的regex口味不同,它需要调整。我爱你!该链接虽然不是100%的答案,但给了我一个很好的选择。上面的链接已经失效,现在可以在以下位置获得:
/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/