正規表現テストツール
端末内で動作し、何も送信されません。すべてお使いの端末上で完結します。入力した内容はどこにも送信されません。
フラグ
よく使うパターン
テスト文字列
マッチが見つかりません
解説
上にパターンを入力すると、各部分の意味の内訳が表示されます
ブラウザ内だけでリアルタイムにマッチをハイライトしながら、JavaScriptの正規表現をテスト・解説・デバッグします。
正規表現(regex)は、テキストの照合・検索・置換に使われるパターンです - コードエディタの検索・置換機能、フォームの検証、ログ解析などを支えているのと同じ基礎技術です。このテストツールはJavaScriptのネイティブな正規表現エンジンをブラウザ内で直接実行します。パターンとテスト文字列を入力すると、すべてのマッチをハイライトし、キャプチャグループを分解し、置換結果をプレビューし、パターンの各部分が何をしているかを平易な言葉で説明します。入力した内容がどこかにアップロードされることは一切ありません。
よくある質問
このツールはどの正規表現方言を使用していますか?
JavaScriptの組み込み正規表現エンジン(RegExpやString.prototype.match/replaceの背後にあるエンジン)を使用しています。ここではすべてサーバーではなくブラウザ内のクライアント側で実行されるためです。PCREに非常に近いですが、いくつか違いがあります - 例えば後読み(lookbehind)のサポートはエンジンのバージョンに依存し、名前付きグループは(?<名前>...)という構文を使います。
パターンが1回しかマッチしないのはなぜですか?
デフォルトでは、g(グローバル)フラグがない場合、正規表現は最初のマッチの後で停止します - これはJavaScriptにおけるRegExp.exec()やString.match()の実際の挙動を反映しています。テスト文字列内の最初のマッチだけでなくすべてのマッチを見つけるには、上のgフラグを有効にしてください。
(...)と(?:...)の違いは何ですか?
どちらもパターンの一部をグループ化しますが、(...) - キャプチャグループ - だけがマッチした内容を保存し、後で参照できるようにします(置換内で$1、$2...として、またはマッチのグループ一覧として)。(?:...)は非キャプチャグループで、マッチ内容を保持せずにグループ化と量指定子の適用のみを行います。グループ化は必要だがキャプチャしたテキストには関心がない場合に便利です。
名前付きグループと$<名前>による置換はどのように機能しますか?
(...)の代わりに(?<名前>...)と書くと、番号ではなく名前でグループをキャプチャできます。置換モードでは、置換テキスト内で$<名前>として参照します - 例えば、(?<year>\d{4})-(?<month>\d{2})を$<month>/$<year>に置換すると、グループ番号を覚えていなくても日付を並べ替えられます。
+ と +? のような、貪欲(greedy)な量指定子と怠惰(lazy)な量指定子の違いは何ですか?
貪欲な量指定子(+、*、{2,4})はできる限り多くマッチしようとし、パターンの残りの部分がマッチするために必要な場合にのみ譲歩します。同じ記号の後に?を付けた怠惰な量指定子は逆に、できる限り少なくマッチしようとし、必要な場合にのみ1文字ずつ広げていきます。例えば、<.+>は<a><b>に対して貪欲に<a><b>全体にマッチしますが、<.+?>は怠惰に<a>だけにマッチします。
先読み(lookahead)と後読み(lookbehind)は、文字を消費しないのに実際には何をチェックしているのですか?
現在位置の直前または直後にパターンが現れるかどうかを、そのパターン自体をマッチ結果に含めずにチェックします - つまり(?=...)と(?<=...)は、そこに何かが存在しなければならないことを前方/後方でチェックし、(?!...)と(?<!...)はそこに存在してはいけないことをチェックします。そのため、\d+(?=px)を使うと「px」が後に続く場合にのみ数字にマッチさせることができ、「px」自体はマッチしたテキストには決して現れません。
開発者向け:URLに `q`(パターン)と `text`(テスト文字列)パラメータを付けてこのページを開くと(例:gizke.com/regex?q=\d+&text=There are 42 apples)、両方とも自動的に入力された状態で表示されます。ほとんどの訪問者には不要な機能で、すぐに使える例に直接リンクするためのものです。