有没有办法从网址
获取顶级域名例如," https://images.google.com/blah" => "谷歌"
我发现了这个:
var domain = new URL(pageUrl).hostname;
但它给了我" images.google.com"而不仅仅是谷歌。
我有的单元测试是:
https://images.google.com => google
https://www.google.com/blah => google
https://www.google.co.uk/blah => google
https://www.images.google.com/blah => google
答案 0 :(得分:6)
你可以这样做:
location.hostname.split('.').pop()
修改强>
看到对您的问题的更改,您需要一个与主机名匹配并从主机名中删除的所有TLD列表,然后您可以使用split('.').pop()
// small example list
var re = new RegExp('\.+(co.uk|me|com|us)')
var secondLevelDomain = 'https://www.google.co.uk'.replace(re, '').split('.').pop()
答案 1 :(得分:3)
除了保持白色和白色之外,这是最简单的解决方案。黑色顶级域名列表。
匹配顶级域名,如果它有两个或多个字符'xxxx.yyy'
匹配顶级域名和子域名,如果两者都在两个字符“xxxxx.yy.zz”下
删除匹配。
返回最后一个句点和字符串结尾之间的所有内容。
我把它分成两个独立的OR |正则表达式规则:
(\.[^\.]*)(\.*$)
- 如果顶级域名为> = 3,则为字符串结尾的上一个句点。(\.[^\.]{0,2})(\.[^\.]{0,2})(\.*$)
- 顶级域和子域< = 2。
var regex_var = new RegExp(/(\.[^\.]{0,2})(\.[^\.]{0,2})(\.*$)|(\.[^\.]*)(\.*$)/);
var unit_test = 'xxx.yy.zz.'.replace(regex_var, '').split('.').pop();
document.write("Returned user entered domain: " + unit_test + "\n");
var result = location.hostname.replace(regex_var, '').split('.').pop();
document.write("Current Domain: " + result);
答案 2 :(得分:1)
这个怎么样?
location.hostname.split('.').reverse()[1]
答案 3 :(得分:0)
您要从网址中提取的内容不是top-level domain(TLD)。 TLD是最右边的部分,例如.COM。
话虽如此,我并不认为有一种简单的方法可以做到这一点,因为那里的网址有两个"常见的"像" .co.uk"而且我想你不想要夸大" .co"在那些情况下。您可以使用现有的两部分" TLD列表"检查,以便你知道何时提取哪个部分。
答案 4 :(得分:0)
function getDomainName( hostname ) {
var TLDs = new RegExp(/\.(com|net|org|biz|ltd|plc|edu|mil|asn|adm|adv|arq|art|bio|cng|cnt|ecn|eng|esp|etc|eti|fot|fst|g12|ind|inf|jor|lel|med|nom|ntr|odo|ppg|pro|psc|psi|rec|slg|tmp|tur|vet|zlg|asso|presse|k12|gov|muni|ernet|res|store|firm|arts|info|mobi|maori|iwi|travel|asia|web|tel)(\.[a-z]{2,3})?$|(\.[^\.]{2,3})(\.[^\.]{2,3})$|(\.[^\.]{2})$/);
return hostname.replace(TLDs, '').split('.').pop();
}
/*** TEST ***/
var domains = [
'domain.com',
'subdomain.domain.com',
'www.subdomain.domain.com',
'www.subdomain.domain.info',
'www.subdomain.domain.info.xx',
'mail.subdomain.domain.co.uk',
'mail.subdomain.domain.xxx.yy',
'mail.subdomain.domain.xx.yyy',
'mail.subdomain.domain.xx',
'domain.xx'
];
var result = [];
for (var i = 0; i < domains.length; i++) {
result.push( getDomainName( domains[i] ) );
}
alert ( result.join(' | ') );
// result: domain | domain | domain | domain | domain | domain | domain | domain | domain | domain
答案 5 :(得分:0)
这是我天真的解决问题的方法。
url.split('.').reverse()[1].split('//').reverse()[0]
支持子域,但不支持公共后缀SLD。
答案 6 :(得分:0)
我只想添加一些东西,因为这是Google的顶部,并且我一直在搜索它。
您可以下载所有URL的Wikipedia数据集(下载量为33Mb),并将其用作测试用例的测试集。另一个测试来源是Alexa排名靠前的1.000.000网站和/或下载了一些populair博客,并从其中解析了网址。
首先,我对它进行范围界定以检索某个“对象”的唯一URI。由于每个html页面原则上都可以有另一个图标来指向通常表示该对象的图标。 “那所有者的域名是什么”。我还将范围仅限制在Alexa排名前10.000.000的网站上。然后,您可以使用Google Favicon服务验证它与您自己的算法相匹配的程度,以接收例如图标,看看它们是否相同。
这是一项相当大的工作,并且需要不断更新。我的建议是不要从简单的案例开始,例如https://en.wikipedia.org/wiki/.tj,但困难者首先https://en.wikipedia.org/wiki/.br。您需要将其设置为字典/数组,因为“ .uk”和“ .gov.uk”是不同的键。