9

URLからトップレベルドメイン名を取得する方法はありますか

たとえば、" https://images.google.com/blah " => "google"

私はこれを見つけました:

var domain = new URL(pageUrl).hostname; 

しかし、Googleだけではなく「images.google.com」が表示されます。

私が持っている単体テストは次のとおりです。

https://images.google.com   => google
https://www.google.com/blah => google
https://www.google.co.uk/blah => google
https://www.images.google.com/blah => google
4

7 に答える 7

4

これは、白と黒のトップ レベル ドメイン リストを維持する以外に、最も簡単な解決策です。

  1. 'xxxx.yyy' が 2 文字以上ある場合、トップ レベル ドメインに一致します。

  2. トップ レベル ドメインとサブドメインの両方が 'xxxxx.yy.zz' の 2 文字以下の場合に一致します。

  3. 一致を削除します。

  4. 最後のピリオドから文字列の末尾までのすべてを返します。


これを 2 つの個別の OR|regex ルールに分割しました。

  1. (\.[^\.]*)(\.*$)- 最上位ドメインが >= 3 の場合、最後のピリオドから文字列の末尾まで。
  2. (\.[^\.]{0,2})(\.[^\.]{0,2})(\.*$)- トップ ドメインとサブドメインは <= 2 です。

var regex_var = new RegExp(/(\.[^\.]{0,2})(\.[^\.]{0,2})(\.*$)|(\.[^\.]*)(\.*$)/);
var unit_test = 'xxx.yy.zz.'.replace(regex_var, '').split('.').pop();
document.write("Returned user entered domain: " + unit_test + "\n");

var result = location.hostname.replace(regex_var, '').split('.').pop();
document.write("Current Domain: " + result);

于 2015-03-18T20:47:03.713 に答える
1

これが、問題を解決するための私の素朴な見解です。

url.split('.').reverse()[1].split('//').reverse()[0]

サブドメインをサポートしますが、パブリック サフィックス SLD はサポートしません。

于 2018-07-27T19:01:52.063 に答える
1
function getDomainName( hostname ) {
    var TLDs = new RegExp(/\.(com|net|org|biz|ltd|plc|edu|mil|asn|adm|adv|arq|art|bio|cng|cnt|ecn|eng|esp|etc|eti|fot|fst|g12|ind|inf|jor|lel|med|nom|ntr|odo|ppg|pro|psc|psi|rec|slg|tmp|tur|vet|zlg|asso|presse|k12|gov|muni|ernet|res|store|firm|arts|info|mobi|maori|iwi|travel|asia|web|tel)(\.[a-z]{2,3})?$|(\.[^\.]{2,3})(\.[^\.]{2,3})$|(\.[^\.]{2})$/);
    return hostname.replace(TLDs, '').split('.').pop();
}

/*** TEST ***/

var domains = [
    'domain.com',
    'subdomain.domain.com',
    'www.subdomain.domain.com',
    'www.subdomain.domain.info',
    'www.subdomain.domain.info.xx',
    'mail.subdomain.domain.co.uk',
    'mail.subdomain.domain.xxx.yy',
    'mail.subdomain.domain.xx.yyy',
    'mail.subdomain.domain.xx',
    'domain.xx'
];

var result = [];
for (var i = 0; i < domains.length; i++) {
    result.push( getDomainName( domains[i] ) );
}

alert ( result.join(' | ') );

// result: domain | domain | domain | domain | domain | domain | domain | domain | domain | domain
于 2015-09-26T06:01:24.987 に答える
0

URL から抽出したいのは、トップレベル ドメイン(TLD) ではありません。TLD は、.com などの右端の部分です。

そうは言っても、「.co.uk」のような 2 つの「共通」部分を持つ URL があり、それらの「.co」を抽出したくないので、これを行う簡単な方法はないと思います。ケース。既存の 2 部構成の「TLD」のリストを使用してチェックし、いつどの部分を抽出するかを知ることができます。

于 2014-09-19T21:50:26.940 に答える