正規表現をテストする方法
- スラッシュの間にパターンを入力します。スラッシュ自体は入力しません。バックスラッシュは1つだけ書きます。コードの文字列リテラル内のような
\\dではなく\dです。 - 必要なフラグをオンにします。選んだフラグは閉じスラッシュの後ろに表示され、その行はJavaScriptの正規表現リテラル
/pattern/flagsとまったく同じ形になります。 - サンプルをテスト文字列に貼り付けます。マッチした部分は、隣り合う結果を区別できるよう2色で交互にハイライトされ、ステータス行に件数が表示されます。
- 表で、各マッチの開始位置(0から数えます)と各キャプチャグループの内容を確認します。ダッシュ(–)は、そのグループがそのマッチに関わらなかったことを示します。
- 必要なら置換文字列を入力し、テキスト全体を検索・置換した結果をプレビューします。置換前後を行単位で比べるには、両方をテキスト比較に貼り付けてください。
閉じていないかっこなど、パターンに構文エラーがあると、結果の代わりにブラウザのエラーメッセージが表示されます。
フラグ
- g · グローバル – すべてのマッチを探します。オフにすると最初のマッチだけが表示され、置換も最初の1か所だけになります。
- i · 大小文字を無視 –
orderが「Order」や「ORDER」にもマッチします。 - m · 複数行 –
^と$が、テキスト全体の先頭と末尾だけでなく、各行の先頭と末尾にもマッチします。 - s · dotAll –
.が改行にもマッチします。 - u · Unicode – 絵文字のように基本多言語面(BMP)の外にある文字を1文字として扱い、
\p{L}のようなプロパティエスケープを使えるようにします。構文が厳しくなるため、いい加減なエスケープはエラーになることがあります。
例
キャプチャグループと置換
このページに最初から入っているパターン (\w+)@(\w+)\.com は、位置8で [email protected]、位置29で [email protected] を見つけ、グループはそれぞれ「alice」/「example」と「bob」/「test」です。[email protected] は .com で終わらないので対象外です。置換文字列を $1 at $2 にすると「Contact alice at example or bob at test.」になります。
日付の書式を変える
パターン (\d{4})-(\d{2})-(\d{2}) にgフラグを付け、置換文字列を $3/$2/$1 にすると、「Due 2026-11-05, paid 2026-12-01」が「Due 05/11/2026, paid 01/12/2026」になります。名前付きグループ (?<y>\d{4})-(?<m>\d{2})-(?<d>\d{2}) と $<d>.$<m>.$<y> を使えば、置換文字列を見るだけで意味がわかります:「05.11.2026」。
最長一致と最短一致
<b>bold</b> and <i>italic</i> に対して、貪欲(最長一致)なパターン <.+> は行全体を1つのマッチにします。.+ ができるだけ多く取ろうとするからです。疑問符を付けた <.+?> は最短一致になり、4つのタグが別々に見つかります。
あらゆる言語の文字
\w が対象とするのはA–Z、a–z、0–9とアンダースコアだけなので、\w+ は「Café Zürich」を「Caf」「Z」「rich」に分け、서울や東京はまったく拾いません。uフラグを付けて \p{L}+ を使えば、どの文字体系の単語も丸ごとマッチします:「Café」「Zürich」「서울」「東京」。
早見表
. | 改行以外の任意の1文字(sフラグなら改行も含む) |
|---|---|
\d \w \s | 数字 · 英数字とアンダースコア · 空白文字 |
\D \W \S | 上のそれぞれの否定 |
[abc] [^abc] [a-z] | 列挙した文字のどれか · それ以外の文字 · 範囲 |
* + ? {2,5} | 0回以上 · 1回以上 · 0回か1回 · 2〜5回 |
*? +? | 最短一致版:できるだけ少なくマッチ |
^ $ \b | 先頭 · 末尾 · 単語の境界 |
(…) (?:…) (?<name>…) | キャプチャグループ · キャプチャしないグループ · 名前付きグループ |
(?=…) (?!…) (?<=…) | 後ろに…が続く · 後ろに…が続かない · 前に…がある |
$1 $<name> $& $$ | 置換文字列で:グループ1 · 名前付きグループ · マッチ全体 · $という文字そのもの |
よくある落とし穴
- 特殊文字のエスケープ忘れ。
example.comのドットは任意の文字にマッチするので、「examplexcom」にもマッチしてしまいます。example\.comと書きましょう。 - 空のマッチ。
x*のように何もない部分にもマッチしうるパターンは、すべての位置でマッチします。「abc」なら空のマッチが4件です。件数には数えられますが、ハイライトする文字がありません。 - 破滅的なバックトラック。
(a+)+$のように繰り返しが入れ子になったパターンは、テキストがあと少しでマッチしそうなときに指数関数的に時間がかかり、ブラウザのタブが固まることがあります。内側を具体的にするか、入れ子をなくしてください。 - ほかの言語でも同じ動きをすると思い込む。このページはブラウザのJavaScriptエンジンを使うので、結果はJavaScript・TypeScriptの
match、matchAll、replaceと同じです。Pythonでは名前付きグループを(?P<name>…)、置換を\1や\g<name>と書きます。PCREやJavaは強欲な量指定子やアトミックグループに対応していますが、JavaScriptは対応していません。
よくある質問
マッチは何件まで表示されますか?
最大10,000件まで検索してハイライトし、ページが重くならないよう表には最初の500件だけを並べます。
ここではマッチするのに、自分のコードではマッチしないのはなぜですか?
たいていはエスケープが原因です。JavaScriptの文字列 "\d" ではバックスラッシュが消えてしまうので、"\\d" と書くか正規表現リテラルを使ってください。コードで同じフラグを使っているかも確認しましょう。
正規表現でメールアドレスを検証できますか?
大まかにしかできません。^[^\s@]+@[^\s@]+\.[^\s@]+$ のような簡単なチェックで入力ミスは拾えますが、本当に確かめる方法は確認メールを送ることだけです。
複数行にまたがってマッチさせるには?
[\s\S] を使うか、sフラグをオンにして . が改行も含むようにします。逆に各行を個別に扱いたいときは、mをオンにします。