2

タイトルが示すように、javascript 正規表現を使用して文字列からドメインを取得しようとしています。

次の文字列を取ります。

String                                  ==>     Return
"google"                                ==>     null
"google.com"                            ==>     "google.com"
"www.google.com"                        ==>     "www.google.com"
"ftp://ftp.google.com"                  ==>     "ftp.google.com"
"http://www.google.com"                 ==>     "www.google.com"
"http://www.google.com/"                ==>     "www.google.com"
"https://www.google.com/"               ==>     "www.google.com"
"https://www.google.com.sg/"            ==>     "www.google.com.sg"
"https://www.google.com.sg/search/"     ==>     "www.google.com.sg"
"*://www.google.com.sg/search/"         ==>     "www.google.com.sg"

「www なしでドメイン名を検索する正規表現 - スタック オーバーフロー」「文字列からルート ドメイン名を抽出する- スタック オーバーフロー」は既に読みまし たが、複雑すぎたので、独自の正規表現を作成してみました。

var re = new RegExp("[\\w]+[\\.\\w]+");
/[\w]+[\.\w]+/
re.exec(document.URL);

で正常に動作しますが"google.com""www.google.com"などで"www.google.com.sg"返されます。http"http://google.com/""http://www.google.com/"

私は正規表現が初めてなので、何が問題なのかわかりません...何かアイデアはありますか?

前もって感謝します!

4

2 に答える 2

10

次の正規表現を使用します。

/(?:[\w-]+\.)+[\w-]+/

ここに正規表現のデモがあります!

サンプリング:

>>> var regex = /(?:[\w-]+\.)+[\w-]+/
>>> regex.exec("google.com")
... ["google.com"]
>>> regex.exec("www.google.com")
... ["www.google.com"]
>>> regex.exec("ftp://ftp.google.com")
... ["ftp.google.com"]
>>> regex.exec("http://www.google.com")
... ["www.google.com"]
>>> regex.exec("http://www.google.com/")
... ["www.google.com"]
>>> regex.exec("https://www.google.com/")
... ["www.google.com"]
>>> regex.exec("https://www.google.com.sg/")
... ["www.google.com.sg"]
于 2014-08-15T08:08:01.647 に答える