javascript正则表达式解析没有协议(protocol)的url

标签 javascript regex url replace

String.prototype.linkify = function() {
this.replace(/((ht|f)tp:\/\/)?([^:\/\s]+)\w+.(com|net|org)/gi, '<a href="$&">$&</a>')
}

http://www.google.com <a href="http://yahoo.com" rel="noreferrer noopener nofollow">http://yahoo.com</a> www.facebook.com它与它们全部匹配,但是如果 facebook 不存在,我希望它在协议(protocol)组前面加上。有没有办法不做两次就可以做到这一点 .replace

最佳答案

我会做这样的事情:

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:s 的一般匹配有多糟糕,因为您的模式存在许多问题。

关于javascript正则表达式解析没有协议(protocol)的url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7559833/

相关文章:

regex - 重定向主页,但如果存在查询字符串则不重定向

php - preg_replace 度数和 phi 符号

java - 在 java 中获取 URL 参数并从该 URL 中提取特定文本

javascript - 当键具有特殊字符时访问 JSON 值

javascript - Jquery 不适用于 Safari

javascript - Phantom JS 没有点击按钮,但如果我使用任何其他浏览器它就可以工作

javascript - 带单选按钮和 JQuery 的条件

JavaScript 在对象中递归替换

json - 当使用 Alamofire 和 SwiftyJSON 从 URL 获取 JSON 时,链接返回 nil 并使我的应用程序崩溃

php - 正则表达式原子分组似乎在 preg_match_all() 中不起作用