Regex Tester
Test regular expressions
Test regular expressions ブラウザ内でローカルに実行
About the
Regex Tester は、独自のサンプル テキストに対して JavaScript 正規表現を実行し、入力時にすべての一致を強調表示するため、推測する代わりにパターンの成功または失敗を観察できます。ハイライトに加えて、各一致とその開始位置およびそのキャプチャ グループがリストされます。これは、グループ 2 が必要な値であるか空の文字列であるかを実際に示す部分です。正規表現の破損のほとんどは 3 つの間違いによって引き起こされます。ここでは 3 つすべてが確認できます。意図したよりも多くのテキストを静かに飲み込む貪欲な量指定子、何でも一致するエスケープされていないドット、最初のヒット後に検索を停止するグローバル フラグの欠落です。
Where people use the
- 少数の実際のログ行に対してログ解析パターンをデバッグします。
- フォームに記入する前に、電話番号または郵便番号のルールを作成します。
- 貼り付けられたテキストのブロックから注文番号または ID を抽出します。
- 1 文字を変更し、ハイライトの動きを観察することで、量指定子がどのように動作するかを学びます。
How to use the
- 1
テストしたいテキストを貼り付けます
創作されたサンプルではなく、本物のサンプルを使用してください。実際のデータのエッジケースはパターンを壊すものであるため、一致すべきではない行も含めてください。
- 2
パターンを書く
たとえば、/[a-z]+/ ではなく [a-z]+ のように、周囲のスラッシュを付けずに式を入力します。フラグは個別のトグルです。
- 3
フラグをオンまたはオフにする
g は最初の一致で停止するのではなくすべての一致を検索し、i は大文字と小文字を無視し、m はアンカーを行ごとに機能させ、s はドットを改行にまたがらせ、u は完全な Unicode モードを有効にし、y は lastIndex に一致するアンカーを検出します。
- 4
マッチテーブルを読む
各結果には、一致したテキスト、その文字オフセット、およびすべてのキャプチャ グループが表示されます。予期しない空のグループは通常、オプションの量指定子が何も一致しなかったことを意味します。
- 5
完成したパターンをコピーする
ハイライトが正しく表示されたら、式をコピーしてコードに貼り付けます。その際、フラグも忘れずに渡すようにしてください。
ヒントとベストプラクティス
- パターンごとに 1 つのルールをテストします。 3 つのジョブを実行する正規表現は読み取ることができず、デバッグも不可能です。
- 一致してはいけない行を含め、その行が強調表示されていないことを確認します。
- 番号付きのグループよりも、年、月、日などの名前付きグループを優先します。これにより、翌月そのパターンに戻ったときにも、そのパターンが何らかの意味を持つようになります。
よくある質問
これはどの正規表現フレーバーを使用しますか?
JavaScript、ブラウザー独自の RegExp エンジン経由。構文は PCRE および Python の re モジュールに似ていますが、同一ではありません。名前付きグループ、先読み、後読み、および Unicode プロパティは、現在のブラウザーでのすべての動作をエスケープします。
私のパターンが予想よりもはるかに多くのテキストに一致するのはなぜですか?
量指定子はデフォルトで貪欲であるためです。 .* や [0-9]+ のようなものは、残りのパターンの一致を可能にしながら、可能な限り多くのデータを消費します。疑問符を追加すると怠惰になりますので、.*?それとも[0-9]+?最初の機会で停止します。
結果が 1 つしか得られないのはなぜですか?
グローバルフラグはオフです。 g がないと、エンジンは最初の一致を返して停止します。 g を切り替えて、入力内のすべての一致を収集します。
私のアンカーが 2 行目で機能しないのはなぜですか?
デフォルトでは、キャレット アンカーとドル アンカーは各行ではなく、文字列全体の開始と終了を参照します。 m フラグを有効にすると、ライン認識になります。
私のテストデータはどこかに送信されますか?
いいえ。ブラウザ内で組み込みの RegExp オブジェクトを使用して照合が行われます。何もアップロードされないため、実際のログ行や構成フラグメントを安全に貼り付けることができます。
これをフォームへの入力の検証に使用できますか?
ここでパターンを開発できますが、必ずサーバー上で再度検証してください。クライアント側の正規表現は完全にスキップできるため、ユーザーにとって便利な機能であり、決してセキュリティ制御ではありません。