https://blog.csdn.net/esir82/article/details/53333056
给定一个URL字符串,如何解析它,并从中提取出域名?
如下所示:
- domainName("http://github.com/carbonfive/raygun") == "github"
- domainName("http://www.zombie-bites.com") == "zombie-bites"
- domainName("https://www.cnet.com") == "cnet"
大家都知道,URL的第一部分是协议名,这个可以有很多种,比如http,https,甚至以后会新增更多的协议,因此如果把所有的协议名都拿过来匹配,可扩展性太差了。
但是,不管你是怎样的协议,这一段是必不可少的——"://"。
而且往往,这段字符串后面紧接着的就是域名,我们可以做字符串截取。
下面的代码做了详细说明:
- function domainName(url){
- var sign = "://";
- var pos = url.indexOf(sign);
- //如果以协议名开头
- //如:http://github.com/
- if(pos >= 0){
- pos += sign.length;
- //截取协议名以后的部分
- //github.com/
- url = url.slice(pos);
- }
- //以小数点作分割
- var array = url.split(".");
- //如果是以3W开头,返回第二部分
- //如:www.github.com
- if(array[0] === "www"){
- return array[1];
- }
- //如果不是以3W开头,则返回第一部分
- //如:github.com/
- return array[0];
- }
这个方法只考虑了几种通用情况,有些情况,比如说有子域名,没有考虑。
var sign = "://";
var pos = url.indexOf(sign);
//如果以协议名开头
//如:http://github.com/
if (pos >= 0) {
pos += sign.length;
//截取协议名以后的部分
//github.com/
url = url.slice(pos);
}
//以小数点作分割
var array = url.split("/");
if (array.length <= 1) {
alert("url格式不正确,请以 /+后缀 结尾");
return false;
}
if (array.length == 2) {
if (array[1].trim().length==0) {
alert("url格式不正确,添加后缀名结尾");
return false;
}
}
return true;
}