Javascript 从URL捕获顶级域时出现问题

Javascript 从URL捕获顶级域时出现问题,javascript,string,selenium,protractor,Javascript,String,Selenium,Protractor,我想要一种从URL捕获顶级域的方法,但无法获得任何成功。我的问题是URL可能不同。有时用户可以输入www.google.com或m.google.com或m.google.uk或google.uk或www.m.google.com 我试着使用slice,但它不起作用,因为我的URL中可以有2到3个字符。我不能基于“.”进行拆分,我可能会得到2、3或4个结果。我可以使用一行JavaScript函数吗?有没有简单的自定义功能 所有帖子都指向获取主机名,但在我的例子中,我只想提取URL的最后3或2个字

我想要一种从URL捕获顶级域的方法,但无法获得任何成功。我的问题是URL可能不同。有时用户可以输入www.google.com或m.google.com或m.google.uk或google.uk或www.m.google.com

我试着使用
slice
,但它不起作用,因为我的URL中可以有2到3个字符。我不能基于“.”进行拆分,我可能会得到2、3或4个结果。我可以使用一行JavaScript函数吗?有没有简单的自定义功能

所有帖子都指向获取主机名,但在我的例子中,我只想提取URL的最后3或2个字符(com、uk、cn等)。我也可以应用多个if-else循环,但我想避免这种情况,并想检查是否有一个简单的解决方案

我正在寻找输出为'com'或'uk'或'cn'取决于我的URL的顶级域。URL由用户输入,这就是为什么很难预测用户是否会输入m.google.com或www.m.google.com或www.google.com或仅输入google.com的原因一种可能的方法:

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”
代码适合我。谢谢@StephenP的帮助。谢谢@Timo,但在量角器库中似乎并没有识别文档

var parser = TextBox.siteName;//get input of site from user in parser variable.
 var hostParts = parser.split('.');
    var URLdomain = hostParts[hostParts.length - 1];

如果可以隔离域,则最后一个句点(
)应表示TLD

在这里进行测试:


我想捕获域名(com、uk、cn),而不是主机名。
var host=parser.hostname
console.log(host.slice(host.lastIndexOf('.'))
var hostParts=parser.hostname.split('.')
console.log(hostParts[hostParts.length-1])
@NewWorld您必须像Timo一样声明和初始化“parser”
var parser=document.createElement('a')
。如果对您更有意义的话,您可以将其命名为parser以外的名称。@StephenP我意识到并做到了这一点,但它向我抛出了一个错误,说明文档未定义。可能是量角器中未定义文档。我使用下面的代码,它工作得很好,所以我认为我们是好的。我还没有检查这是否在某些情况下不起作用
var parser=TextBox.siteName//在解析器变量中从用户获取站点的输入。var hostParts=parser.split('.');var URLdomain=hostParts[hostParts.length-1]@Paul Roub这不是重复的。我想在这里提取域名(com,cn,uk),而不是像您在回答中指出的那样提取主机名。然后请编辑您的问题以澄清您正在寻找顶级域名(TLD),而不是域名(将是google.com等)。您的问题没有显示预期的输出(这会让我们知道您使用了错误的术语). 事实上,由于没有,它将再次被关闭,因为它太宽泛或脱离主题。您从哪里获得URL?如果是当前的
窗口。位置
有一个简单的解决方案。如果你有一些任意的字符串,谁知道从哪里来,这是一个更难的问题。URL的形式是什么?它是一个完整的,总是以
http
|
s
开头,还是某个片段?@StephenP我编辑了我的问题。我希望它能帮助你理解。它是由用户输入的,因此它可以或不能从
http | s
开始。我对Timo的答案发表了评论。一旦你得到了主机名,有很多方法可以得到它的最后一部分——顶级域。啊哈。。。我想我们都认为这是在浏览器环境中运行的
document
(小写
d
)又名
窗口。如果您的javascript在浏览器中运行,document
将存在。正如我在问题中提到的,我可以使用多个if-else,但我希望避免这种情况。我发布的解决方案或Stephen P在两行中推荐的解决方案有什么问题吗?@NewWorld您的解决方案可能是理想的。
量角器
标记是您在自我回答之前使用的库的唯一指示(我没有注意到,Stepen P对此进行了提示),因此您看到了各种不同的解决方案。您应该考虑修改问题描述,以反映该解决方案所需的技术,然后在站点允许的时候标记您自己作为正确答案。
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;
}