1. ホーム
  2. regex

[解決済み] URLの一部を取得する (Regex)

2022-05-11 11:41:24

質問

URLが与えられている(一行)。

http://test.example.com/dir/subdir/file.html

正規表現を使って以下の部分を抽出するにはどうしたらよいでしょうか。

  1. サブドメイン (test)
  2. ドメイン (example.com)
  3. ファイルのないパス(/dir/subdir/)。
  4. ファイル(file.html)
  5. ファイル(/dir/subdir/file.html)のあるパス。
  6. パスを除いたURL ( http://test.example.com )
  7. (その他、便利だと思うものを追加してください)

以下のようなURLを入力しても正規表現が正しく動作するはずです。

http://example.example.com/example/example/example.html

どのように解決するのですか?

<ブロッククオート

をパースして分割するための単一の正規表現。 クエリパラメータを含む完全なURL やアンカーなど

https://www.google.com/dir/1/2/search.html?arg=0-a&arg1=1-b&arg3-c#hash

^((http[s]?|ftp):\/)?\/?([^:\/\s]+)((\/\w+)*\/)([\w\-\.]+[^#?\s]+)(.*)?(#[\w\-]+)?$

RexExのポジション。

url: RegExp['$&'],

protocol:RegExp.$2,

host:RegExp.$3,

path:RegExp.$4,

file:RegExp.$6,

query:RegExp.$7,

ハッシュ:RegExp.8ドル

であれば、さらにホスト('.'区切り)を簡単にパースできます。

I は、このような使い方をします。

/*
    ^(.*:)//([A-Za-z0-9\-\.]+)(:[0-9]+)?(.*)$
*/
proto $1
host $2
port $3
the-rest $4

は、できるだけ具体的に「その他」を解析します。それを1つの正規表現で行うのは、まあ、ちょっとおかしいですよね。