🎈

URLから「サブドメイン」を取り出す方法

2024/09/18に公開

まず簡単な方法は存在しないようです。

下記質問の回答にもあるように、トップレベルドメインが"com"のように「一つ」の場合と"co.uk"のように「二つ」の場合など様々なケースがあり、 「どんなURLでもサブドメインを抽出できる」 ためにはすごく複雑な処理が必要となります。
javascript - Get second level domain name from URL - Stack Overflow

そのため、以下は単純な(ただ多くのサイトに共通する)ケースでのみ正常に動作するコードです。具体的には、URLが"htttps://"で始まり、トップレベルドメインが「一つ」で、ドメインが'/'で終わる場合(例えば"https://images.google.com/" で、"https://images.google.com"ではないケース)です。

const PROTOCOL_LENGTH = "https://".length; // =8

const extract_subdomain = (url) =>{
  return url.substring(PROTOCOL_LENGTH, url.indexOf('/', PROTOCOL_LENGTH + 1)).split('.').reverse()[1];
}

console.log(extract_subdomain("https://www.google.com/blah"));// => google
console.log(extract_subdomain("https://www.images.google.com/"));// => google
////失敗するパターン
//ドメインの最後に'/'が付いてない
console.log(extract_subdomain("https://images.google.com"));// => undefined
//トップレベルドメインが"co.uk"のように「一つ」でない('.'で分割すると2つになる)
console.log(extract_subdomain("https://www.google.co.uk/blah"));// => co

なお、複雑なライブラリでいいなら以下のものが役に立つかもしれません(注: 私自身は動作チェックをしてません)。
remusao/tldts: JavaScript Library to extract domains, subdomains and public suffixes from complex URIs.

Discussion