我想要一种从URL捕获顶级域名的方法,但是无法取得任何成功。我的问题是URL可能不同。有时用户可以输入www.google.com或m.google.com或m.google.uk或google.uk或www.m.google.com
我尝试使用slice
,但它没有用,因为我的网址中可以有2或3个字符。我无法根据"。"进行拆分,我可能得到2或3或4个结果。我可以使用单行JavaScript函数吗?有没有简单的自定义功能?
所有帖子都指向获取主机名,但在我的情况下,我想提取URL的最后3或2个字符(com,uk,cn等)。我也可以应用多个if-else循环,但我想避免这种情况,并想检查是否有一个简单的解决方案。
我正在寻找输出作为' com'或者' uk'或者' cn'取决于我的网址的顶级域名。用户输入的网址很难预测用户是否会输入m.google.com或www.m.google.com或www.google.com或只是google.com
答案 0 :(得分:2)
一种可能的方法:
var parser = document.createElement('a');
parser.href = "http://www.google.com/path/";
console.log(parser.hostname); // "www.google.com"
parser.href = "http://m.google.com/path/";
console.log(parser.hostname); // "m.google.com"
parser.href = "http://www.m.google.com/path/";
console.log(parser.hostname); // "www.m.google.com"

答案 1 :(得分:1)
下面的代码适合我。感谢@StephenP的帮助。还要感谢@Timo,但似乎Document未在量角器库中识别。
var parser = TextBox.siteName;//get input of site from user in parser variable.
var hostParts = parser.split('.');
var URLdomain = hostParts[hostParts.length - 1];
答案 2 :(得分:0)
如果您可以隔离域名,则最后一个句点(.
)应表示TLD。
在此处测试:https://jsfiddle.net/ubb61wam/2/
var addresses = [
'google.com', // should return 'com'
'https://google.com.uk', // should return 'uk'
'yahoo.cn/foo/bar.foo', // should return 'cn'
'file:///usr/local' // should fail
];
for (var index in addresses) {
console.log(tld(addresses[index]));
}
function tld(address) {
// handle edge-cases
if (typeof address == 'undefined' || address.indexOf('file:///') != -1)
return undefined;
var part = address;
//remove http://
if (part.indexOf('//') != -1)
part = part.split('//')[1];
//isolate domain
if (part.indexOf('/') != -1)
part = part.split('/')[0];
//get tld
if (part.indexOf('.') != -1) {
var all = part.split('.');
part = all[all.length - 1];
}
return part;
}