【问题标题】:Javascript regex to find a base URLJavascript 正则表达式查找基本 URL
【发布时间】:2010-11-15 12:42:13
【问题描述】:

我对 JS 中的这个正则表达式感到很生气:

var patt1=/^http(s)?:\/\/[a-z0-9-]+(.[a-z0-9-]+)*?(:[0-9]+)?(\/)?$/i;

如果我给出一个像“http://www.eitb.com/servicios/concursos/516522/”这样的输入字符串,这个正则表达式应该返回 NULL,因为在基本 URL 之后有一个“文件夹”。它适用于 PHP,但不适用于 Javascript,就像在这个脚本中一样:

<script type="text/javascript">
var str="http://www.eitb.com/servicios/concursos/516522/"; 
var patt1=/^http(s)?:\/\/[a-z0-9-]+(.[a-z0-9-]+)*?(:[0-9]+)?(\/)?$/i;
document.write(str.match(patt1));
</script>

返回

http://www.eitb.com/servicios/concursos/516522/,,/516522,,/ 

问题是:为什么它不起作用?如何让它发挥作用?

这个想法是在另一个函数中实现这个正则表达式,以在传递的 URL 格式不正确时获取 NULL:

http://www.eitb.com/ -> 正确 http://www.eitb.com/something -> 不正确

谢谢

【问题讨论】:

    标签: javascript regex url


    【解决方案1】:

    我不是javascript专业人士,但习惯perl regexp,所以我会尝试一下;正则表达式中间的. 可能需要转义,因为它可以映射/ 并破坏整个正则表达式。

    试试这个方法:

    var patt1=/^http(s)?:\/\/[a-z0-9-]+(\.[a-z0-9-]+)*?(:[0-9]+)?(\/)?$/i; 
    

    【讨论】:

    • 完美。我不知道这个点。
    • 西里尔符号现在也可以在 URL 中使用
    【解决方案2】:

    考虑到您有一个格式正确的 URL,这个简单的 RegExp 每次都应该可以解决问题。

    var patt1=/^https?:\/\/[^\/]+/i;
    

    这是细分...

    从第一个位置开始(用^表示)

    寻找http

    http 后面可以跟 s(用 ? 表示,表示字符的 0 或 1 或设置在它之前)

    然后在http或https后面查找://(用:\/\/表示)

    接下来匹配除 / 之外的任意数量的字符(由 [^\/]+ 表示 - + 表示 1 个或多个)

    不区分大小写(用i表示)

    注意: 这也会选择端口 http://example.com:80 - 去掉 :80 (或后面的冒号通过任何端口号)只需将 : 添加到否定字符类 [^\/:] 例如。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-24
      • 2016-06-27
      • 1970-01-01
      • 2011-11-09
      • 1970-01-01
      • 1970-01-01
      • 2012-01-24
      • 2016-12-31
      相关资源
      最近更新 更多