正規表現チェッカー
ブラウザのJavaScript RegExpエンジンでパターンを実行するので、結果は自分のJavaScriptコードと同じになります。スラッシュなしで\d{3}-\d{4}のように入力し、gフラグで全ての一致を探します。
使い方
- パターンを前後のスラッシュなしで入力します。例: \d{3}-\d{4}
- フラグをオン・オフします。gフラグで全マッチを探し、なしの場合は最初のマッチだけを表示します。
- 検索するテキストを貼り付けます。入力中にマッチがハイライトされ、表に各マッチとキャプチャグループが並びます。
計算方法
パターンはブラウザ組み込みのJavaScript RegExpエンジンでコンパイルするので、構文も動作も自分のJavaScriptコードで動かしたときと同じです。PCRE、Python、.NETなど他の方言とは一部異なります。古いエンジンの後読み対応や、JavaScriptにない強欲な量指定子などがその例です。
gフラグありではexecを繰り返し呼び、最大1,000件までマッチを集めます。a*や先読みのように空文字にマッチした場合は検索位置を1文字進めるので、ループは必ず終わります。
マッチ処理はバックグラウンドのワーカーで動きます。(a+)+$のような破滅的なバックトラックで1.5秒を超えるとワーカーを止め、ページが固まる代わりにタイムアウトのメッセージを出します。
正規表現チートシート
| 記号 | 意味 |
|---|---|
| . | 改行以外の任意の1文字(sフラグありなら改行も含む) |
| \d \w \s | 数字、単語文字(英字・数字・アンダースコア)、空白 |
| \D \W \S | \d、\w、\s の否定 |
| [abc] [^abc] [a-z] | a、b、cのどれか / a、b、c以外 / 範囲 |
| ^ $ | テキストの先頭と末尾(mフラグなら各行の先頭と末尾) |
| \b | 単語の境界 |
| * + ? | 0回以上、1回以上、0回か1回 |
| {3} {2,5} {2,} | ちょうど3回、2から5回、2回以上 |
| *? +? | できるだけ短くマッチする最短一致版 |
| (abc) (?:abc) | キャプチャグループ、非キャプチャグループ |
| (?<name>abc) | 名前付きキャプチャグループ |
| a|b | aまたはb |
| (?=x) (?!x) | 後ろにxが続く / 続かない(先読み) |
| (?<=x) (?<!x) | 前にxがある / ない(後読み) |
| \1 \k<name> | グループ1または名前付きグループへの後方参照 |
フラグ
| フラグ | 効果 |
|---|---|
| g | グローバル: 最初の1件ではなく全マッチを探す |
| i | 大文字と小文字を区別しない |
| m | 複数行: ^ と $ が改行位置でもマッチ |
| s | dotAll: . が改行にもマッチ |
| u | Unicode: サロゲートペアを1文字として扱い、\p{...} を使えるようにする |
| y | sticky: 各マッチは前のマッチの終わりからちょうど始まる必要がある |
よくある質問
どの正規表現エンジンを使っていますか?
ブラウザに実装されたJavaScriptの正規表現です。ここで動くパターンは、自分のJavaScriptやTypeScriptのnew RegExpでも同じように動きます。
マッチが1件しか出ません
g(global)フラグがないと、JavaScriptの正規表現は最初のマッチで止まります。gをオンにすると全件表示されます。
パターンがタイムアウトしたのはなぜ?
(a+)+や(.*)*のような入れ子の量指定子は、惜しくもマッチしないテキストに対して指数関数的な数の経路を試すことがあります。内側をより具体的にするか、入れ子をやめてください。
入力したテキストは送信されますか?
いいえ。パターンもテキストもすべてブラウザ内で処理し、サーバーには送りません。