web-dev-qa-db-ja.com

正規表現-サブドメインとドメインを抽出します

特定のURLからサブドメインとドメイン部分を抽出する正規表現(javascript/node.js)を作成しようとしています。これが私がやったことです:

[^(?:http:\/\/|www\.|https:\/\/)]([^\/]+)

現在、プロトコルにはhttp、httpsを考慮し、「www」を除外しています。 URLのサブドメイン+ドメイン部分の一部。式を確認しましたが、ほとんど機能します。しかし、ここに問題があります:

成功

'http://mplay.google.co.in/sadfask/asdkfals?dk=10'.match(/[^(?:http:\/\/|www\.|https:\/\/)]([^\/]+)/i)

'http://lplay.google.co.in/sadfask/asdkfals?dk=10'.match(/[^(?:http:\/\/|www\.|https:\/\/)]([^\/]+)/i)

失敗

'http://play.google.co.in/sadfask/asdkfals?dk=10'.match(/[^(?:http:\/\/|www\.|https:\/\/)]([^\/]+)/i)

'http://tplay.google.co.in/sadfask/asdkfals?dk=10'.match(/[^(?:http:\/\/|www\.|https:\/\/)]([^\/]+)/i)

結果配列の最初の要素を使用します。 「遊ぶ」理由を理解できません。 &「tplay」。動作しません。この点で誰も私を助けてくれますか?

「/ p」と「/ t」は正規表現エバリュエーターにとって意味がありますか?

正規表現を使用して特定のURLからサブドメインとドメインを抽出する他の方法はありますか?

編集-

例:

https://play.google.com/store/apps/details?id=com.skgames.trafficracer =>play.google.com

https://mail.google.com/mail/u/0/#inbox =>mail.google.com

17
sunilkumarba

正規表現が正しくないようです。この正規表現を試してください:

/^(?:https?:\/\/)?(?:[^@\n]+@)?(?:www\.)?([^:\/\n?]+)/img

正規表現デモ

54
anubhava

JavaScriptでURLを解析しようとする人は約100万人です。 SO過去にさかのぼる既存の質問が表示されなかったことに少し驚いています。最後にしたいのは、別の壊れた正規表現を作成することです。あなたの質問に答えを提供した人に。

多くの適切に文書化されたライブラリとこれを処理するアプローチがあります。 Google it。最も簡単な方法は、メモリ内にa要素を作成し、hrefに割り当ててから、そのhostnameおよびその他のプロパティにアクセスすることです。 http://tutorialzine.com/2013/07/quick-tip-parse-urls/ を参照してください。ボートが浮かない場合は、 ri.j sのようなライブラリを使用します。

あなたが本当にライブラリを使いたくなくて、車輪の再発明を主張するなら、少なくとも次のようなことをしてください:

function get_domain_from_url(url) {
    var a = document.createElement('a').
    a.setAttribute('href', url);
    return a.hostname;
}

基本的に、URLのサブドメイン/ドメイン部分の抽出をブラウザーのURL解析ロジックに委任します。これは、これまでに作成したものよりもはるかに優れています。

jquery/javascriptでURLを解析しますか?JavaScriptでURLを解析しますjavascriptでURLをホスト名とパスに解析するにはどうすればよいですか? 、または JavaScriptまたはjQueryを使用してURLを解析 。どのようにそれらを見逃したのですか?申し訳ありませんが、重複としてこれを閉じるには投票する必要があります。

10
user663031

anubhava's回答と同じRegExp、 プロトコル相対URL のようなサポートのみ追加//google.com

/^(?:https?:)?(?:\/\/)?(?:[^@\n]+@)?(?:www\.)?([^:\/\n]+)/im

正規表現デモ

6
Nicu Surdu

以下は、://の前のすべてを無視するソリューションです

.*\://?([^\/]+)

www.を無視する場合

.*\://(?:www.)?([^\/]+)
5
Ashoka Lella

正規表現はかなりうまく機能します。ブラケットを取り外すだけです。最終的な表現は次のとおりです。

^(?:http:\/\/|www\.|https:\/\/)([^\/]+)

役に立てば幸いです!

1
Academia