WebTecNote

[javascript] URIからドメインだけ正規表現で取得する

正規表現によるマッチング。location.hrefにmach()使ってドメイン部分を取り出す。

※表示の都合上、全角の「?」が混じっているので注意

var str = "http://www.google.co.jp/";
var domain = str.match(/^[httpsfile]+:\/{2,3}([0-9a-z\.\-:]+?):?[0-9]*?\//i)[1];
alert(domain);

変数domainは配列になり、domain[0]にはプロトコルからドメイン後ろのスラッシュまで、
domain[1]にはドメイン部分のみが格納されます。
変数strをlocation.hrefにすると、表示しているページのURIがマッチング対象になる。

正規表現の解説

詳しい解説はとほほさんのリファレンス参照。

/^[httpsfile]+:\/{2,3}([0-9a-zA-Z\.\-:]+?):?[0-9]*?\//i

  1. //
    new RegExp()の代わりにバックスラッシュ2つ
  2. /^/
    先頭から開始する^(アクサンシルコンフレックス)記号を先頭に追加
  3. /^[httpsfile]+/
    プロトコル判別の条件を追加。http・https・ftp・fileにヒットさせるため、[](大カッコ)で文字を指定。
    カッコ内の文字いずれかが1文字以上続くので+(プラス)を後ろにつける。
  4. /^[httpsfile]+\/{2,3}/
    /(スラッシュ)は\(バックスラッシュ)をつけてエスケープしておく。
    fileの場合に3本つくので、{}(中カッコ)で2本または3本という条件を後ろにつける。
  5. /^[httpsfile]+\/{2,3}()/
    ドメイン部分だけ取得するため、()(小カッコ)で取り出す範囲を指定する。
  6. /^[httpsfile]+\/{2,3}([0-9a-zA-Z\.\-:]+?)/
    ドメインの文字は0~9、a~z、ドット、ハイフン、コロンの組み合わせなので、
    [](大カッコ)でこれらの文字を範囲指定し、後ろに+(プラス)を付ける。
    このヒットは1回だけでいいので、プラスの後に?(疑問符)もつけておく。
  7. /^[httpsfile]+\/{2,3}([0-9a-zA-Z\.\-:]+?):?[0-9]*?/
    127.0.0.1:8000の「:8000」部分があった場合にマッチする条件を追加。
    :? → コロンが1つあるかもしれないしないかもしれない
    [0-9]*? → 数字がいくつかあるかもしれないしないかもしれない
  8. /^[httpsfile]+\/{2,3}([0-9a-zA-Z\.\-:]+?):?[0-9]*?\//
    末尾に最初のバックスラッシュを追加。
  9. /^[httpsfile]+:\/{2,3}([0-9a-zA-Z\.\-:]+?):?[0-9]*?\//i
    iをつけると大文字小文字の区別をしなくなる。
モバイルバージョンを終了