给定一个URL,我必须使用正则表达式找到主机名。
网址可以有多种形式:
http://www.google.com/ [expected 'google.com']
https://www.google.com:2000/ [expected 'www.google.com']
http://100.1.25.3:8000/foo/bar?abc.php=xxxx+xxxx [expected '100.1.25.3']
www.google.com [expected 'www.google.com']
10.0.2.2:5000 [expected '10.0.2.2']
localhost/ [expected 'localhost']
localhost/foo [expected 'localhost']
我最接近的可能是:
^(?:[^:]+://)*([^:/]+).*
并使用正则表达式的第一个捕获组捕获的字符串。
但是,有些案例失败了:
google.com [nothing is captured, expected 'google.com']
http://///x ['http' is captured, expected nothing]
什么是可以应对这些案件的正则表达式?
请注意:
google!com
中取出https://google!com/foo
,则可以接受*。* ...甚至可能是理想的,因为主机名可以包含Unicode字符(国际化域名)。
答案 0 :(得分:1)
我想出了这个
/^(?:[a-zA-Z\d][a-zA-Z\d-]+){1}(?:\.[a-zA-Z]{2,6})+$/
^
- 表示必须以此正则表达式
(?:[a-zA-Z\d][a-zA-Z\d-]+){1}
- 匹配主机名
(?:\.[a-zA-Z]{2,6})+
- 匹配一个或多个TLD。 (co.uk)
$
- 表示必须以此正则表达式结束
答案 1 :(得分:1)