2016-11-04 7 views
1

URLからトップレベルドメインを取得する方法が必要ですが、成功を得ることはできません。私の場合の問題は、URLが異なる可能性があるということです。ユーザーがwww.google.com、m.google.com、m.google.uk、google.uk、www.m.google.comなどを入力することがありますURLからトップレベルドメインを取得する際の問題

sliceを使用しようとしましたが、私のURLに2文字または3文字を持つことができます。私は "。"に基づいて分割することはできません、私は2または3または4の結果を得るかもしれません。私が使うことができる1行のJavaScript関数はありますか?簡単なカスタム機能はありますか?

すべての投稿がホスト名を取得するように指示していますが、私の場合はURLの最後の3文字または2文字(com、uk、cnなど)を抽出します。私は複数のif-elseループを適用することもできますが、私はそれを避けたいのですが、これに対して単純な解決策があるかどうかチェックしたいと思います。

私のURLのトップレベルドメインに応じて、 'com'または 'uk'または 'cn'として出力を探しています。 URLはユーザーによって入力されるため、ユーザーがm.google.comかwww.m.google.comかgoogle.comかを予測するのは難しいです。

+0

@Paul Roubこれは重複ではありません。ドメイン名(com、cn、uk)をここで抽出したいと思います。 – NewWorld

+0

質問を編集して、トップレベルドメイン(TLD)、ドメイン名(google.comなど)を探していることを明確にしてください。質問には期待されていない出力が表示されます間違った言葉を使っていたことを知っている)そのままでは、No [mcve]のためにToo BroadまたはOff Topicとして再び閉じられます。 –

+0

URLはどこにありますか?現在の 'window.location'の場合、簡単な解決策があります。誰かから来た任意の文字列があれば、それはもう少し難しい問題です。どのような形式でURLですか?それは完全で、常に 'http' |' s'で始まるか、それとも何らかの断片ですか? –

答えて

1

は私のために動作します。あなたの助けに感謝@StephenP。 @ティモもありがとうございますが、ドキュメントは分度器のライブラリでは特定されていないようです。

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

ah ha ...私たちは皆、ブラウザのコンテキストでこれが実行されていると思います。あなたのjavascriptがブラウザで実行されている場合、 'document'(小文字の' d')別名 'window.document'が存在します。 –

2

1つの可能なアプローチ:

コードの下

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"

+0

私はドメイン名(com、uk、cn)を取得し、ホスト名は取得しません。 – NewWorld

+0

'var host = parser.hostname;' 'console.log(host.slice(host.lastIndexOf( '。')));' –

+0

'var hostParts = parser.hostname.split( '。');' 'コンソール.log(hostParts [hostParts.length - 1]); ' –

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; 
} 
+0

私は私の質問で言及したように、私はelseを複数使うことができましたが、私はそれを避けたかったのです。私が投稿したソリューションやStephen Pが2行で推薦するのに間違っていますか? – NewWorld

+0

@NewWorldあなたのソリューションはおそらく理想的です。 'protractor'タグはあなたが自己の答えに先立って使っているライブラリの唯一の兆候でした(私はそれに気付かなかった、Stepen Pはこれを暗示しています)。この解決策が必要とする技術を反映するように問題の説明を修正し、明示的にサイトに合った適切な回答としてマークすることを検討する必要があります。 – tresf

関連する問題