URLとルーティング

URLPatternテスト一致しない成分まで確認

1行に1つのURLを入力。下の設定でURLPatternまたはパス専用の照合エンジンを選びます。

URLPatternテスト

照合パターン

候補URL

URLとパターンはブラウザー内で処理し、入力URLへのリクエストは送りません。

照合結果

候補URLを1行以上入力してください。

照合設定

URLPatternでは*が任意値、空欄が空の成分を示します。全体が不一致でも、明細には各成分の独立したキャプチャを表示します。

ベースURLは相対候補と相対文字列パターンに使用します。成分形式の条件には追加しません。

上限:各パターン512、候補200行、各URLとベース2,048、合計131,072 UTF-16単位。ワーカーは2秒まで。

結果が古いか、計算中です。

末尾にスラッシュを加えただけでルートが外れるときは、成功例だけでは原因を見つけにくくなります。URLPatternテストでは一致する例と外れる例を並べ、条件を一つずつ変えて確認できます。

URLパターン照合とフレームワークのルート判定は同じ処理ではありません。名前付きグループやワイルドカードの意味を、選択したライブラリの実際の出力で確認してください。

URLPatternテストで違いを見つける

全体の不一致を分解する

URLPatternテストはURL全体の結果と成分別の診断を分けて表示します。ホスト名が違ってもパスのidは取得できる場合があります。部分的なキャプチャは診断用で、URL全体が一致したという意味ではありません。

一つのパターンから三行の候補へ線が伸び、中央の行だけ一成分が不一致になっている図。

ホストまで見るかを選ぶ

同じpathnameを持つ二つのURLでも、ホスト名を限定するURLPatternでは結果が異なります。パス専用エンジンはホストを照合しないため、両方が一致することがあります。この差を入力例で確かめられます。

同じパスを持つ二つの候補を、URL全体の検査とパスだけの検査で比較する図。

構文と入力形式を先に決める

01

空欄と星印を使い分ける

成分形式では8項目を明示的に渡します。*は任意の値、空欄は空の成分だけを許可します。ベースURLは候補の解決に使い、成分パターンへホスト条件を補いません。

02

ルートの版を確認する

path-to-regexp v8はExpress 5のパス構文です。省略可能な部分には波括弧、ワイルドカードには名前を使います。切り替えても入力は保持され、構文は自動変換されません。

03

更新を待ってから保存する

自動実行は編集後350 msで開始します。オフならボタンかCtrl/Cmd + Enterで実行。編集すると古い結果のコピーと保存が無効になります。不一致行の明細を開いてから書き出してください。

一致の理由を成分ごとに読む

固定した二つの実装

URLPatternテストはurlpattern-polyfill 10.1.0とpath-to-regexp 8.4.2を使います。レポートには版、設定、入力を記録します。ブラウザーのネイティブ実装を測る機能ではなく、各ブラウザーで同じpolyfillを利用します。

キャプチャの形を維持

URLPatternのグループは成分単位で保持し、追加のデコードは行いません。省略された値はnullで出力。ルート側の名前付きワイルドカードは通常配列となり、デコードを無効にすると元の文字列になります。

解決後のアドレスも表示

相対URLをベースURLで解決し、元の表記と異なる場合は両方を表示します。既定ポートの省略、ホスト名の正規化、ドットセグメントの解消が、照合前に起きていることを確認できます。

失敗した行も残す

無効なURLとデコード失敗は行番号付きで記録し、他の候補は継続します。構文エラーは実行全体を停止。最初は50行だけ表示しますが、JSONには全行と各行のエラーを含めます。

照合の対象と制限

文法を混ぜない
URLPatternでは:id?や:id(\d+)を使用できます。v8では任意部分を波括弧で囲み、*pathのように名前を付けます。古いルート構文は単なる不一致ではなく、コンパイルエラーになる場合があります。
クエリーは順序のある文字列
searchは先頭の?を除いた文字列、hashは先頭の#を除いた文字列です。パラメーターの並べ替えや集合比較は行いません。パスエンジンはpathnameだけを検査し、クエリーやホストは対象外です。
正規化とデコードを区別
URLの解析でホスト、既定ポート、ドットセグメントが正規化されます。ルートパラメーターは通常デコードされ、不正なパーセント表記があるとその行がエラーになります。デコードをオフにすれば符号化した値を調べられます。
行の内容を勝手に整理しない
空行は飛ばし、重複や空白、元の行番号は保持します。制御文字と不正なUnicodeは拒否します。URLの解析が前後の空白を処理する場合も、元の文字列はレポートに残ります。
実行量に上限がある
各パターンまたは成分は512、URLとベースURLは各2,048、入力合計は131,072 UTF-16単位まで。候補は200行、ワーカーの制限時間は2秒です。上限超過時に途中までの成功結果は返しません。
アプリケーションは実行しない
HTTPメソッド、ミドルウェア、ルート順、他フレームワークは検証しません。URLへのアクセス、パスの書き換え、ファイル読み込み、履歴保存、入力を含む共有リンクにも対応しません。

URLPatternテストのよくある質問

末尾のスラッシュで結果が変わるのはなぜですか?

URLPatternは末尾スラッシュを自動で任意扱いにしません。/users/:idは/users/42/と一致しません。ルート側は既定で末尾スラッシュを許可し、設定で無効にできます。

大文字小文字の区別は変更できますか?

はい。既定では区別し、設定で無視できます。ただしホスト名はURL解析時点で正規化されます。パスの区別を調べるには/users/42と/USERS/42を比較してください。

検索パラメーターの順番は関係しますか?

関係します。searchは文字列のパターンです。a=1&b=2とb=2&a=1を無順序の同じ集合としては比較しません。クエリーを対象外にするならsearchを*にします。

既定ポートを名前付きグループで取得できないのはなぜですか?

httpsの443などはURL解析で空のportになります。そのため必須の名前付きグループは元の443を取得できません。解決後URLと実際のportパターンを確認してください。

path-to-regexp v8と同じ構文ですか?

異なります。URLPatternは8成分を照合し、v8はここではパスだけを照合します。v8の任意部分は波括弧、ワイルドカードは名前付きです。エンジンを変えてもExpressアプリの挙動全体を再現するわけではありません。

意外な一致結果がありましたか?

一致例と反例を並べて試す

一致するはずのURLと一致しないはずのURLを残し、一つの条件だけ変えて成分明細を確認しましょう。