我对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;不正确
由于
答案 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 (或冒号后跟任何端口号)只需将:添加到否定字符类 [^ \ /:] ,例如。