Javascript正则表达式查找基本URL

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 - >不正确

谢谢

JxA*_*IxN 8

考虑到你有一个格式正确的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(或冒号后面的任何端口号),只需添加一个:在否定字符类[^\/:]例如.


Bar*_*min 7

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

试试这种方式:

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