javascript正则表达式解析没有协议的url
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
的情况下做到这一点?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我会做这样的事情:(
我修复了您的代码的其他几个问题:您缺少
return
并且您使用.
匹配域名句点,而不是\.
.)而且我想我不需要指出由于您的模式存在许多问题,这通常与 URL:s 匹配得有多差。
I would do something like this:
(I fixed a couple of other problems with your code: you were missing a
return
and you were matching the domain name period using.
rather than\.
.)And I assume I don’t need to point out how poorly this will match URL:s in general, due to a number of problems with your pattern.
如果您实际上不需要匹配 FTP URL,则可以假设链接的“http://”部分。这个正则表达式可以做到这一点,同时允许您使用 https。
我不确定您的用例是什么,但我想指出此正则表达式将在以下网址上失败:
这是因为您使用的硬编码 tld 很少(com、net、org),并且不匹配域后的任何字符。
If you don't actually need to match FTP URLs, you can just assume the "http://" section of the link. This regex does that, while allowing you to also use https.
I'm not sure what your use case is, but I'd like to note this regex will fail on the following urls:
This is because you're using few hardcoded tlds (com, net, org), and aren't matching any characters after the domain.