当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《什么是匹配URL的好正则表达式?》经验,为你挑选了5个好方法。

目前我有一个输入框,可以检测URL并解析数据.

所以现在,我正在使用:

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

问题是,当我输入一个URL时www.google.com,它不起作用.当我进入时http://www.google.com,它正在工作.

我的正则表达式不是很流利.谁能帮我?



1> Daveo..:

如果要确保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");
}


2> foufos..:
(https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|www\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9]+\.[^\s]{2,}|www\.[a-zA-Z0-9]+\.[^\s]{2,})

将符合以下情况

http://www.foufos.gr

https://www.foufos.gr

http://foufos.gr

http://www.foufos.gr/kino

http://werer.gr

www.foufos.gr

www.mp3.com

www.t.co

http://t.co

http://www.t.co

https://www.t.co

www.aa.com

http://aa.com

http://www.aa.com

https://www.aa.com

不符合以下条件

www.foufos

www.foufos-.gr

www.-foufos.gr

foufos.gr

http://www.foufos

http://foufos

www.mp3#.com

var expression = /(https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|www\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9]+\.[^\s]{2,}|www\.[a-zA-Z0-9]+\.[^\s]{2,})/gi;
var regex = new RegExp(expression);

var check = [
  'http://www.foufos.gr',
  'https://www.foufos.gr',
  'http://foufos.gr',
  'http://www.foufos.gr/kino',
  'http://werer.gr',
  'www.foufos.gr',
  'www.mp3.com',
  'www.t.co',
  'http://t.co',
  'http://www.t.co',
  'https://www.t.co',
  'www.aa.com',
  'http://aa.com',
  'http://www.aa.com',
  'https://www.aa.com',
  'www.foufos',
  'www.foufos-.gr',
  'www.-foufos.gr',
  'foufos.gr',
  'http://www.foufos',
  'http://foufos',
  'www.mp3#.com'
];

check.forEach(function(entry) {
  if (entry.match(regex)) {
    $("#output").append( "
Success: " + entry + "
" ); } else { $("#output").append( "
Fail: " + entry + "
" ); } });



3> Michael Conn..:

这些是您正在寻找的机器人.这是从validator.js中获取的,这是您应该真正用来执行此操作的库.但如果你想自己动手,我该阻止你呢?如果你想要纯正的正则表达式,那么你可以拿出长度检查.如果你真的想确定是否符合规范,我认为测试URL的长度是个好主意.

 function isURL(str) {
     var urlRegex = '^(?!mailto:)(?:(?:http|https|ftp)://)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$';
     var url = new RegExp(urlRegex, 'i');
     return str.length < 2083 && url.test(str);
}


值得一提**这会让您的浏览器崩溃**.参见示例:http://jsfiddle.net/Lrnambtt/9/
有关@RubenMartinezJr的评论的更多信息。-它*最大限度地*减少了Chrome和Firefox(Mac OS)上的CPU使用率,但有趣的是*没有*最大限度地使Safari上的CPU使用了内存。

4> Amar Palsapu..:

另一个可能的解决方案,上面的解决方案在解析查询字符串参数时失败了.

var regex = new RegExp("^(http[s]?:\\/\\/(www\\.)?|ftp:\\/\\/(www\\.)?|www\\.){1}([0-9A-Za-z-\\.@:%_\+~#=]+)+((\\.[a-zA-Z]{2,3})+)(/(.)*)?(\\?(.)*)?");

if(regex.test("http://google.com")){
  alert("Successful match");
}else{
  alert("No match");
}

在此解决方案中,请随意修改[-0-9A-Za-z\.@:%_\+~#=,以匹配域/子域名.在此解决方案中,查询字符串参数也很谨慎.

如果你没有使用RegEx,那么从表达式替换\\\.

希望这可以帮助.


很好的解决方案但http://foo.co.uk失败...必须设置为此var regex = new RegExp("^(http [s]?:\\/\\ /(www \\.)? |的ftp:\\/\\/|(WWW \\.)){1}([0-9A-ZA-Z - \\ @(WWW \\.):?%_\+〜#= ] +)+((\\ [A-ZA-Z] {2,3}.)+)(/(.)*)(\\(?)*)")?; 谢谢Amar.

5> Roman..:

试试这个

(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?

推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有