从URL

时间:2016-11-04 17:33:34

标签: javascript string selenium protractor

我想要一种从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

3 个答案:

答案 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;
}