2011-10-18 36 views
0

我使用这个js代码的主机从一个字符串匹配:在没有协议时匹配字符串上的主机名://?

url.match(/:\/\/(www\.)?(.[^/:]+)/); 

这工作时,URL有协议://开头。例如:

这工作得很好:

var url = "http://domain.com/page"; 
url.match(/:\/\/(www\.)?(.[^/:]+)/); 

但这并不:

var url = "domain.com/page"; 
url.match(/:\/\/(www\.)?(.[^/:]+)/); 

我曾尝试:

url.match(/(:\/\/)?(www\.)?(.[^/:]+)/); 

而细的主机名时,它匹配不包含protocol://,但是当它包含它时,它只返回协议而不是主机名。

如何在不包含域的情况下匹配域?

回答

1

好吧,在你从@xanatos大脑崩溃之前回答这里是一个简单的基本需求正则表达式。其他答案更完整,并处理比这个正则表达式更多的情况:

(?:(?:(?:\bhttps?|ftp)://)|^)([-A-Z0-9.]+)/ 

组1将有你的主机名。 URL解析对于正则表达式来说是一件脆弱的事情。你在正确的轨道上。你有两个正则表达式部分工作。我只是将它们结合起来

编辑:昨天晚上我累了。这是jscript的正则表达式

if (subject.match(/(?:(?:(?:\bhttps?|ftp):\/\/)|^)([\-a-z0-9.]+)\//i)) { 
    // Successful match 
} else { 
    // Match attempt failed 
} 
+0

+1小记:你应该告诉他激活忽略大小写,最后转义'/',或许增加对[IPv6]的支持(http://msdn.microsoft .com/en-us/library/windows/desktop/ms740593(v = vs.85).aspx)地址(好的......我在这里exxagerating)....我通常会试图保持一致。如果您在某处使用小写字母,则始终使用小写字母。啊,你把他的端口(他的一个接受它)的“选项”带走了...而且你和他都不支持'http:// username:password @ site' – xanatos

4

我使用Steven Levithan的this function,它很体面地解析网址。

这里是你如何使用这个功能

alert(parseUri("www.domain.com/foo").host) 
+1

这不是一个答案,而是一个评论。 – FailedDev

+0

@FailedDev我会说这是一个简洁不高质量的答案。但这是解决OP问题的可能方案。 – xanatos

+1

@xanatos我没有说这不是一个解决方案。但简单的链接可以简单地去评论?还是我误会了? – FailedDev

0

这可能是更复杂一点比必要的,但它似乎工作:

^((?:.+?:\/\/)?(?:.[^/:]+)+)$ 
  1. 该协议的非捕获组。从字符串 开始匹配任意数量的字符,直到:。可能有零个或一个 协议。
  2. 其他网址的非捕获组。这部分必须存在。
  3. 将它归为一组。
+0

我会写'^(?:[^:] +:\/\ /)?([^ \ /:] +)'获取主机名。 – lkuty

1

var rx = /^(?:(?:ht|f)tp(?:s?)\:\/\/|~\/|\/)?(?:\w+:\[email protected])?(?:(?:[-\w]+\.)+(?:com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum|travel|[a-z]{2}))(?::[\d]{1,5})?(?:(?:(?:\/(?:[-\w~!$+|.,=]|%[a-f\d]{2})+)+|\/)+|\?|#)?(?:(?:\?(?:[-\w~!$+|.,*:]|%[a-f\d{2}])+=?(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)(?:&(?:[-\w~!$+|.,*:]|%[a-f\d{2}])+=?(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)*)*(?:#(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)?$/; 

应该是尤伯杯URL解析正则表达式:-)从这里http://flanders.co.nz/2009/11/08/a-good-url-regular-expression-repost/

测试在这里拍摄:http://jsfiddle.net/Qznzx/1/

它显示正则表达式的无用。

+0

哈哈。 +1仅仅用于“无用的正则表达式”:D – FailedDev

相关问题