Javascript正则表达式查找基本URL

时间:2010-11-15 12:42:13

标签: javascript regex url

我对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/ - &gt;正确 http://www.eitb.com/something - &gt;不正确

由于

2 个答案:

答案 0 :(得分:7)

我不是javascript pro,但习惯于perl regexp,所以我会试一试;正则表达式中间的.可能需要进行转义,因为它可以映射/和jinx整个正则表达式。

尝试这种方式:

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

答案 1 :(得分:7)

考虑到你有一个格式正确的URL,这个简单的RegExp每次都应该做到这一点。

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

以下是细分......

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

寻找 http

http后跟 s (由表示,表示该字符的0或1或在其之前设置)

然后在http或https之后找:// (由:\ / \ / 表示)

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

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

注意:这也会选择端口http://example.com :80 - 以摆脱:80 (或冒号后跟任何端口号)只需将添加到否定字符类 [^ \ /:] ,例如。