Javascript 从URL捕获顶级域时出现问题
我想要一种从URL捕获顶级域的方法,但无法获得任何成功。我的问题是URL可能不同。有时用户可以输入www.google.com或m.google.com或m.google.uk或google.uk或www.m.google.com 我试着使用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个字
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;
}