什么是匹配 URL 的好正则表达式?

新手上路,请多包涵

目前我有一个输入框,它将检测 URL 并解析数据。

所以现在,我正在使用:

var urlR = /^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)
           (?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/;
var url= content.match(urlR);

问题是,当我输入像 www.google.com 这样的 URL 时,它不起作用。当我输入 http://www.google.com 时,它正在工作。

我对正则表达式不是很流利。谁能帮我?

原文由 bigbob 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 525
1 个回答

正则表达式,如果你想确保 URL 以 HTTP/HTTPS 开头:

 https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)

如果不需要 HTTP 协议:

 [-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)

要尝试此操作,请参阅 http://regexr.com?37i6s ,或访问限制较少的版本 http://regexr.com/3e6m0

示例 JavaScript 实现:

 var expression = /[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)?/gi;
var regex = new RegExp(expression);
var t = 'www.google.com';

if (t.match(regex)) {
  alert("Successful match");
} else {
  alert("No match");
}

原文由 Daveo 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题