String.prototype.linkify = function() {
this.replace(/((ht|f)tp:\/\/)?([^:\/\s]+)\w+.(com|net|org)/gi, '<a href="$&">$&</a>')
}
与http://www.google.com http://yahoo.com www.facebook.com
匹配,但是如果不存在,我希望facebook与协议组一起使用。有没有办法在不做两个.replace
的情况下做到这一点?
答案 0 :(得分:1)
如果您实际上不需要匹配FTP URL,则可以假定该链接的“http://”部分。这个正则表达式允许你也使用https。
this.replace(/(http(s)?:\/\/)?(([^:\/\s]+)\.(com|net|org))/gi,
'<a href="http$2://$3">http$2://$3</a>')
我不确定你的用例是什么,但我想注意这个正则表达式会在以下网址上失败:
这是因为您使用的是几乎没有硬编码的tld(com,net,org),并且不匹配域之后的任何字符。
答案 1 :(得分:1)
我会做这样的事情:
String.prototype.linkify = function () {
return this.replace(/((?:ht|f)tp:\/\/)?([^:\/\s]+\w+\.(?:com|net|org))/gi, function (_, protocol, rest) {
var url = (protocol || "http://") + rest
return '<a href="' + url + '">' + url + '</a>'
})
}
(我修复了您的代码中的其他一些问题:您错过了return
并且您使用.
而非\.
匹配域名时段。)
我认为我不需要指出一般来说,由于你的模式存在许多问题,这与URL匹配的程度有多差。