如:在 www.baidu.com
获取 baidu.com
a.baidu.com
获取 baidu.com
可能有很多人没有明白我的意思,这的难点是不可能用正则获取匹配截取获取根域名的
比如www.a.china.com.cn你怎么知道截取的是china.com.cn呢??
所以我感觉应该有个域名库然后在匹配吧。
如:在 www.baidu.com
获取 baidu.com
a.baidu.com
获取 baidu.com
可能有很多人没有明白我的意思,这的难点是不可能用正则获取匹配截取获取根域名的
比如www.a.china.com.cn你怎么知道截取的是china.com.cn呢??
所以我感觉应该有个域名库然后在匹配吧。
判断这个显然需要额外知识。
应该有个域名库然后在匹配吧
这个方向是对的。你想到的那个域名库叫做 public suffix list 。
www.a.china.com.cn
中的.com.cn
是一个public suffix,那么网站自己的部分就是下一级的 china.com.cn
。
document.location
里面有你想要的
function getLocation(){
var arr = document.domain.split('.');
if(arr.length === 2){
return document.domain;
}
if(arr.length > 2 && arr[0] !== 'www'){
return arr.slice(1).join('.')
}
return arr.slice(1).join('.')
}
如果用的是IP访问就有问题,三四级域名怎么办,要一个域名库了吗,哭死
正则表达式替换一下:
document.domain.match(/[^\.]+\.[^\.]+$/)[0]
貌似有问题,如果这样呢:
document.domain.replace(/^[^\.]+\./, "")
还是有问题,这样吧:
var arr = document.domain.match(/[^\.]+/g);
if(arr.length == 2)
console.log(arr.join("."))
else if(arr.length >=3){
arr.shift();
console.log(arr.join("."))
}
不能直接获取啊,你获取当前链接然后截取吧。
function getLocation(href) {
var match = href.match(/^(https?\:)\/\/(([^:\/?#]*)(?:\:([0-9]+))?)([\/]{0,1}[^?#]*)(\?[^#]*|)(#.*|)$/);
return match && {
protocol: match[1],
host: match[2],
hostname: match[3],
port: match[4],
pathname: match[5],
search: match[6],
hash: match[7]
}
}
getLocation(document.location.href)
本来想偷懒找个数据的,看了上面的回答。。。.com.cn
的情况自己想办法吧,反正我不会买这样的域名。?
/**
* 根据host返回根域名
* @param {[string]} host [window.location.host]
* @return {[string]} [如果不是域名则返回IP]
*/
export let getDomain = (host) => {
host = host.split(':')[0]
return isNaN(host.substring(host.lastIndexOf('.'))) ? host.substring(host.substring(0, host.lastIndexOf('.')).lastIndexOf('.') + 1) : host
}
10 回答11.2k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答1.5k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
把 host 按
.
分割,length 为 2,不用处理,大于 2 的去掉数组首位。哦,不对。我没有考虑到三级域名...还是需要一个特征库匹配。