Iva*_*van 1 javascript regex url
我在JS中使用这个正则表达式疯了:
var patt1=/^http(s)?:\/\/[a-z0-9-]+(.[a-z0-9-]+)*?(:[0-9]+)?(\/)?$/i;
Run Code Online (Sandbox Code Playgroud)
如果我给出一个像"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>
Run Code Online (Sandbox Code Playgroud)
它回来了
http://www.eitb.com/servicios/concursos/516522/,,/516522,,/
Run Code Online (Sandbox Code Playgroud)
问题是:为什么它不起作用?如何使它工作?
我的想法是在另一个函数中实现此正则表达式,以便在传递的URL格式不正确时获取NULL:
http://www.eitb.com/ - >正确 http://www.eitb.com/something - >不正确
谢谢
考虑到你有一个格式正确的URL,这个简单的RegExp应该每次都做到这一点.
var patt1=/^https?:\/\/[^\/]+/i;
Run Code Online (Sandbox Code Playgroud)
这是细分......
从第一个位置开始(用^表示)
寻找http
http后面跟着s(用?表示,表示字符的0或1或者在它之前设置)
然后在http或https之后查找://(表示为:\ /\/)
下一个匹配除了/之外的任意数量的字符(由[^\/] +表示 - +表示1或更多)
不区分大小写(以i表示)
注意:这也将拿起港口http://example.com :80 -摆脱的:80(或冒号后面的任何端口号),只需添加一个:在否定字符类[^\/:]例如.
我不是javascript专家,但习惯于perl regexp,所以我会试一试; 正.则表达式中间可能需要进行转义,因为它可以映射/整个正则表达式和jinx.
试试这种方式:
var patt1=/^http(s)?:\/\/[a-z0-9-]+(\.[a-z0-9-]+)*?(:[0-9]+)?(\/)?$/i;
Run Code Online (Sandbox Code Playgroud)