FIRST CH TOOLS / 31 Regex Tester
正規表現テスター
パターンとテキストを入れると、マッチした箇所がその場で色分けされます。キャプチャグループの中身・マッチの位置・置換した結果まで一度に確認でき、g ・i ・m ・s ・u ・y のフラグも切り替えられます。JavaScript(ECMAScript)フレーバーで、ブラウザの RegExp がそのまま動いています。
入れるとその場で照合されます
置換は結果のプレビューだけで、上のテキストは書き換わりません。\n ・\t はエスケープとして解釈します。
パターンもテキストもブラウザの外へ出ることはありません(照合はこのページの中の RegExp だけで動いています)。URLパラメータで直接呼び出せます: /regex/?pattern=%5Cd%2B&flags=g&text=a1b22c333 / /regex/?pattern=…&flags=gi&replace=%5B%241%5D
正規表現の早見表(JavaScript)
| . | 改行以外の任意の1文字(s フラグを付けると改行にもマッチ) |
|---|---|
| \d \D | 数字(0-9)/数字以外。全角の123はマッチしません |
| \w \W | 英数字とアンダースコア([A-Za-z0-9_])/それ以外。日本語はマッチしません |
| \s \S | 空白(スペース・タブ・改行・全角スペース)/空白以外 |
| [abc] | いずれか1文字。[a-z0-9] のように範囲も書ける |
| [^abc] | これら以外の1文字(先頭の ^ が否定の意味になる) |
| \p{…} | u フラグ必須。\p{L} 文字・\p{N} 数字・\p{sc=Han} 漢字・\p{sc=Hiragana} ひらがな |
| \t \n \r | タブ・改行(LF)・復帰(CR) |
| \\ \. \* | 記号そのものを表すときはバックスラッシュを前に置く(. * + ? ^ $ ( ) [ ] { } | \) |
| * | 直前を0回以上。ab* は a にもマッチする |
|---|---|
| + | 直前を1回以上 |
| ? | 直前を0回か1回(あってもなくてもよい) |
| {3} | ちょうど3回。{2,} は2回以上、{2,4} は2〜4回 |
| *? +? ?? | 最短一致。<.+> は行全体を飲み込むが、<.+?> なら最初のタグだけで止まる |
| ^ $ | テキストの先頭・末尾。m フラグを付けると各行の行頭・行末になる |
|---|---|
| \b \B | 単語の境界/境界以外。\bcat\b は concatenate にマッチしない。単語の定義は \w なので日本語では効きません |
| (?=…) | 先読み。その後ろが…である位置(…自体はマッチに含まれない) |
| (?!…) | 否定の先読み。その後ろが…でない位置 |
| (?<=…) | 後読み。その手前が…である位置 |
| (?<!…) | 否定の後読み。その手前が…でない位置 |
| (…) | キャプチャグループ。中身を取り出せる(置換では $1 ・$2) |
|---|---|
| (?:…) | 取り出さないグループ。まとめたいだけのときはこちらが速い |
| (?<名前>…) | 名前付きグループ。置換では $<名前>、コードでは m.groups.名前 |
| \1 \k<名前> | 後方参照。同じ場所にマッチした文字列そのものをもう一度求める |
| a|b | どちらか。^(a|b)$ のように括弧で範囲を区切る |
| $& | マッチした文字列全体 |
|---|---|
| $1 $2 | 1番目・2番目のキャプチャグループ |
| $<名前> | 名前付きグループ |
| $` $' | マッチより前の部分・後ろの部分 |
| $$ | $ という文字そのもの |
| g | global。1件で止めず、最後まで探す。置換をすべての箇所に効かせるにも必要 |
|---|---|
| i | ignoreCase。大文字・小文字を区別しない |
| m | multiline。^ ・$ を各行の行頭・行末に効かせる |
| s | dotAll。. を改行にもマッチさせる |
| u | unicode。\p{…} が使えるようになり、絵文字などを1文字として扱う |
| v | unicodeSets。u の上位版で、文字クラスの差集合 [\p{L}--[a-z]] などが書ける(u とは同時に指定できない) |
| y | sticky。lastIndex の位置からしか照合しない(字句解析などで使う) |
| d | hasIndices。グループの位置を取得する。このページでは常に有効にしています |
「.*」は行の端まで飲み込む
<b>A</b> と <b>B</b> <b>.*</b> → <b>A</b> と <b>B</b> 全体にマッチ(最長一致) <b>.*?</b> → <b>A</b> だけにマッチ(最短一致)
量指定子は既定でできるだけ長く取ります。目的の終端より先に同じ文字があると、そこまで飲み込んでから後戻りします。? を付けて最短一致にするか、[^<]* のように終端に使う文字を除いた文字クラスで書くと意図どおりになります。後者のほうが後戻りが起きないぶん速く、安全です。
入れ子の量指定子は処理が固まることがある
^(a+)+$ ← 危険(惜しいところで失敗するテキストで爆発する) "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!" を試すと組み合わせが指数的に増える ^a+$ ← 同じ意味で安全
量指定子の中にさらに量指定子があると、失敗したときに分け方の組み合わせをすべて試すため、文字数に対して処理時間が指数的に伸びます(ReDoS)。ユーザー入力を正規表現で検査するコードでは、これがそのままサービス停止の原因になります。このページはマッチを集める処理が1秒を超えたところで打ち切り、該当しそうな書き方を見つけたら指摘に出します。ただし1回の照合の中で起きる後戻りは途中で止められないため、極端なパターンでは一時的に反応が返らなくなることがあります(JavaScriptの正規表現に割り込む方法が無いためで、これはサーバー側で同じことが起きたときの深刻さそのものです)。
「\d」「\w」は日本語を見ていない
\w+ → 「東京」にはマッチしない
[\p{L}]+ → u フラグを付ければ日本語にもマッチする
[ぁ-んァ-ヶ一-龠]+ → 範囲指定でも書けるが取りこぼしがある
\w ・\d ・\b はASCIIの範囲しか見ていません。日本語を扱うときは u フラグ+\p{sc=Han}(漢字)・\p{sc=Hiragana}・\p{sc=Katakana} を使うと、常用外の漢字や異体字も取りこぼしません。全角の数字(123)は \d にマッチしないことにも注意してください。
lastIndex は次の呼び出しに持ち越される
const re = /a/g;
re.test('abc'); // true (lastIndex が 1 になる)
re.test('abc'); // false (1文字目から先には a が無い)
g や y の付いた正規表現オブジェクトは前回どこまで照合したかを覚えています。同じオブジェクトを使い回す test() ・exec() が1回おきに false を返すのはこれが原因です。ループの外で re.lastIndex = 0 に戻すか、判定用の正規表現には g を付けないでください(String.matchAll ・replaceAll は内部でこの管理をしてくれます)。
他の言語とは書き方が違うところがある
JavaScript に無いもの: \A \z (代わりに ^ $)
(?>…) アトミックグループ・a++ 所有量指定子
/x 拡張モード(空白とコメントの無視)
JavaScript にあるもの: (?<=…) 後読み・\p{…}(u フラグ)・v フラグの集合演算
このページはブラウザの RegExp をそのまま呼んでいるため、結果はJavaScript(ECMAScript)の仕様どおりです。PHPの preg_*(PCRE)やPythonの re で書いたパターンをそのまま貼ると、対応していない記法でエラーになることがあります。逆に、ここで動いたパターンはブラウザとNode.jsでそのまま動きます。
メールアドレスを完全に検査する正規表現は書かない
[\w.+-]+@[\w-]+\.[\w.-]+ ← 入力ミスに気づける程度の簡易チェック
RFC5322に厳密に従った正規表現は数百文字になり、読めないうえに保守できません。フォームの検証は「@ があってドメインらしき文字列が続く」程度に留め、本当に届くかどうかは確認メールで確かめるのが実務的です。同じことがURL・電話番号・住所にも当てはまります。
HTMLの解析に正規表現を使わない
<a href="…">…</a> を正規表現で取り出す → 入れ子・属性内の > ・コメントで破綻する
document.querySelectorAll('a') / DOMParser を使う
HTMLは入れ子を許すため、正規表現(正規言語)では原理的に正しく解析できません。1回限りの置換や、形の決まった機械生成のHTMLなら実用になりますが、他人が書いたページを相手にするならDOMパーサーを使ってください。JSON・CSVも同様で、パーサーがあるならそちらが確実です。
How to Use
- パターンを入れるスラッシュの間に正規表現を書きます。/…/gi の形でコードから貼り付けた場合は、ボタン1つでスラッシュを外してフラグを取り込めます。よく使うパターン(メールアドレス・URL・日付など)から選ぶこともできます。
- テキストを貼る右側にマッチした箇所が色分けで表示され、下にマッチの位置とキャプチャグループの中身が並びます。フラグを切り替えると結果はその場で更新されます。
- 置換を確かめる置換後の文字列に $1 や $<名前> を書くと、置換した結果がプレビューされます。そのままコピーして使えます。
About This Tool
正規表現が「思ったとおりに書けているか」をその場で確かめるツールです。パターンとテキストを入れると、マッチした箇所がテキストの中で色分けされます。隣り合うマッチは色を交互にするので、どこからどこまでが1件なのかが見分けられます。長さ0のマッチ(\b や先読みだけのパターン)は細い縦棒で示すため、「何も見えないのに件数だけ増える」状態も目で確認できます。
キャプチャグループの中身を1件ずつ確認できます。マッチした文字列だけでなく、(…) で囲んだ各グループの値と、そのグループがテキストのどこにあったかを並べて表示します。名前付きグループ (?<year>…) は名前も添えて表示し、マッチしなかったグループは「(マッチなし)」と明示します。| を使ったパターンで「どの枝を通ったか」を追うときに役立ちます。
置換の結果を、元のテキストを壊さずに試せます。置換後の文字列には $& ・$1 ・$<名前> が使えます。1行の入力欄では改行を入れられないため、\n ・\t はエスケープとして解釈します。結果を入力へを押すと置換後のテキストを入力側へ移せるので、置換を何段か重ねた結果も確かめられます。
つまずきやすいところを指摘します。g フラグが無くて1件しか見つからないとき、改行のあるテキストで . や ^ ・$ の挙動が期待と違いそうなとき、(a+)+ のような入れ子の量指定子(ReDoSの原因)があるときに、その理由を日本語で表示します。マッチを集める処理は1秒で打ち切ります(1回の照合の中の後戻りには割り込めないため、極端なパターンでは一時的に反応が止まることがあります)。
JavaScript(ECMAScript)フレーバーです。ブラウザの RegExp をそのまま呼んでいるため、ここで動いたパターンはそのままJavaScriptやNode.jsのコードに貼れます。逆に、PCRE(PHP)やPythonにしかない記法(\A ・アトミックグループ・所有量指定子・拡張モード)は使えません。u フラグを付ければ \p{sc=Han} のようなUnicodeプロパティで日本語を指定できます。
パターンもテキストも端末の外へ出ません。ログの整形と組み合わせるならテキスト・コード差分チェッカー、URLのクエリを分解するならURLパラメータ分解・UTMタグ編集、検査用のダミー文字列を作るならテストデータ生成が使えます。
Other Tools
- 01画像→WebP一括変換WebP Converter
- 02白背景の透過White BG Remover
- 03コントラスト比チェッカーContrast Checker
- 04文字数カウントCharacter Counter
- 05llms.txt ジェネレーターllms.txt Generator
- 06JSON-LD構造化データ生成JSON-LD Generator
- 07Markdown→PDF変換MD → PDF
- 08OGPメタタグ生成ウィザードOGP Wizard
- 09faviconジェネレーターFavicon Generator
- 10TikTok投稿ツールTikTok Publisher
- 11文字コード・改行コード変換Encoding Converter
- 12画像→AVIF変換+picture生成AVIF Converter
- 13テストデータ生成Test Data Generator
- 14Marp Markdown→スライドMarp Slides
- 15テキスト・コード差分チェッカーDiff Checker
- 16Cron式ビジュアル解説&発火日時Cron Explainer
- 17Base64 & Data URI変換Base64 & Data URI
- 18URLパラメータ分解・UTMタグ編集URL Parameters
- 19HTMLエンティティ・特殊文字エスケープHTML Escape
- 20JSON ⇄ YAML 相互変換JSON ⇄ YAML
- 21PX ⇄ REM / EM 単位変換&スケール表PX ⇄ REM / EM
- 22Colorコード変換&アルファ透過Color Converter
- 23MD5 / SHA-256 ハッシュ生成Hash Generator
- 24JWTデコーダー&有効期限チェッカーJWT Decoder
- 25User-Agent解析&デバイス判定User-Agent Parser
- 26UUID (v4) & ULID 一括生成UUID & ULID Generator
- 27アスペクト比計算&レスポンシブサイズAspect Ratio Calculator
- 28Markdownテーブル整形&CSV/TSV変換Markdown Table
- 29SQLクエリフォーマッター&整形SQL Formatter
- 30QRコード生成QR Code Generator
- 32UNIXタイムスタンプ⇄日時変換Unix Time Converter
- 33新規タブメモ帳 Chrome拡張New Tab Memo
- 34画像リサイズ&クロップImage Resizer
- 35EXIF情報の確認&除去EXIF Viewer
- 36robots.txt ジェネレーターrobots.txt Generator
- 37安全なパスワード生成Password Generator
- 38文字列ケース変換Case Converter