無料の Regex テスター — パターンをオンラインでデバッグ & マッチ
任意のテキストに対して regex パターンを即座にテストできます。リアルタイムのマッチハイライト、キャプチャグループ、置換プレビュー、分割、パターン解説に対応。JavaScript 系の正規表現を 100% プライベートに、登録不要で利用できます。
正規表現テスターとは?
正規表現テスター(regex テスター)は、regex パターンを書き、テストテキストを貼り付け、パターンが何にマッチするかを正確に確認できるツールです — キャプチャグループ、置換プレビュー、フラグの解説まで揃い、コードを再コンパイルしたりスクリプトを走らせたりする必要がありません。開発者にとっては、ループを分単位からミリ秒単位に縮めます: パターンを微調整し、ハイライトの動きを観察し、自信を持って regex をデプロイできます。
正規表現はテキストパターンを記述するためのコンパクトな言語です。`\d+` は 1 桁以上の数字にマッチします。`[A-Za-z_]\w*` は典型的な識別子にマッチします。`(?
本テスターは、最新ブラウザに搭載されているネイティブの ECMA-262 RegExp エンジン上で動作します — JavaScript、TypeScript、Node.js、Deno、Bun から呼び出すのと同じエンジンです。つまり: キャプチャグループ(番号付きと `(? テスターが生のマッチを超えて表示するもの: 「マッチ & キャプチャグループ」パネルは、各マッチを [start, end) オフセットと各キャプチャグループの値とともに一覧表示します — `String.prototype.matchAll` を /d フラグ付きで呼び出したときと同じ情報を、視覚的に読みやすく並べたものです。Replace タブは $1 / $& / $` / $' / $$ / $ プライバシーについて: すべての操作はローカルです。あなたのパターンとテストテキストはページを離れません — ログにも残らず、分析サービスにも送られず、ディスクにも保存されません。localStorage に残るのは UI 設定(アクティブタブと普段使っているフラグ)だけです。これにより、編集済みのログサンプル、社外秘のパターン、内部設定、データスキーマのヒントを含むパターンも安全に扱えます。サーバー連動型のテスター(regex101 など)と比べると、プライバシーとレイテンシーは厳密に上です;トレードオフは単一方言サポート(JavaScript のみ)です。 regex 初心者の方には、「Common patterns」ドロップダウンから実戦投入済みのスターターをどうぞ: メールアドレス、URL、IPv4、UUID、hex color、ISO 日付、米国電話番号、末尾の空白を取り除くパターン。1 つを読み込み、用意されたサンプルテキストに対するマッチを観察し、パターンを 1 文字ずつ変更してエンジンの反応を体感してください。regex 駆動のクリーンアップの前後を比較したいときは Text Diff ツールと、入力や期待出力が JSON のときは JSON Formatter と、マッチ対象が URL エンコードされた文字列のときは URL エンコーダー と組み合わせて使ってください。
// The pattern you build in this tester drops straight into JavaScript.
// Example: extract every ISO date from a string with named groups.
const pattern = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/g;
const text = 'shipped 2026-05-21, scheduled 2026-06-30';
for (const m of text.matchAll(pattern)) {
console.log(m.groups.year, m.groups.month, m.groups.day);
// → 2026 05 21
// → 2026 06 30
}
// Same regex, used in a replace with $<name> templates:
text.replace(pattern, '$<day>/$<month>/$<year>');
// → 'shipped 21/05/2026, scheduled 30/06/2026'
// With the /d flag, every match carries [start, end] indices
// per capture group — the Matches panel uses this to paint offsets.
const p2 = /(?<year>\d{4})-(?<month>\d{2})/gd;
const m = [...text.matchAll(p2)][0];
m.indices.groups.year; // [8, 12] 主な機能
ライブマッチハイライト
パターンがパースされた瞬間、テストテキスト内のすべてのマッチが点灯します。隣接するマッチが視覚的に数えやすいよう交互の色を使い、結果上のカウントバッジが正確な総数を示します — Run ボタンも、200ms を超えるデバウンスもありません。
キャプチャグループのサイドパネル
右側の「マッチ & キャプチャグループ」パネルは、各マッチをカードとして表示します — [start, end) オフセット、フルマッチのテキスト、内部の番号付き + 名前付きキャプチャグループすべてが揃います。名前付きグループは $
$1 / $& / $ によるライブ置換プレビュー
Replace タブに切り替えると、置換がリアルタイムで適用されます。ECMAScript の置換アルファベットがフルサポート: 位置参照の $1..$N、名前付きの $
Regex 境界での分割
Split タブは、あなたの regex で String.prototype.split を呼び、各部分を番号付きリストで表示します。空の部分は ⏎ の記号で描画され、隣接する区切り文字をエンジンがどう扱ったかが確認できます — CSV 風の入力クリーンアップのデバッグに便利です。
パターンエクスプレイナー(トークン単位)
Explain タブはパターンをチップ単位にトークン化し、クラス(escape / quantifier / character class / group / anchor / alternation)で色分けし、各チップに 1 行の説明を添えます。出荷前に自分の regex を自分に読み聞かせるのに使えるほか、コードレビューや教育の場でも有用です。
ReDoS セーフ(ウォールクロックタイムアウト)
すべてのマッチ呼び出しは 250 ミリ秒の予算でラップされます。`(a+)+`、`(a|aa)+b`、深く入れ子になった量指定子のような古典的な破滅的バックトラック形状は、「Pattern timed out」警告で安全に中断します — タブがフリーズせずページは応答性を保ちます。サーバー側サンドボックスなしでの検出です。
Common Patterns ライブラリ
開発者がもっとも頻繁に手を伸ばす 8 つの実戦投入済みスターター: メール、URL、IPv4、UUID v4、hex color、ISO date、米国電話番号、末尾の空白を取り除くパターン。それぞれにサンプルが付属するので、応用前に regex の動きを確認できます。
パーマリンク共有(アップロードなし)
「Copy link」はパターン + フラグ + サンプルテキストを URL ハッシュにエンコードします(#p=…&f=gim&t=…)。ブラウザは URL フラグメントをリクエストで送信しないので、共有リンクは go-tools.org のサーバーに触れずに受信者のマシンで状態を再現します。自己完結型で監査もしやすい仕組みです。
100% プライベート、ブラウザのみ
あなたの regex とテストテキストはデバイスから離れません。ネットワークリクエストなし、ログなし、入力した内容に対する分析もなし。DevTools → Network で確認できます: 入力してもリクエストはゼロです。社外秘のパターン、編集済みのログ、regex101 に貼り付けたくないテキストでも安全に使えます。
実践例
段落からすべてのメールアドレスを抽出する
[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,} /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g /g フラグを有効にしたパターンを貼り付け、テストテキストに段落を投入すると、ハイライト表示ですべてのメールアドレスが浮かび上がります。右側の「マッチ & キャプチャグループ」パネルには、各アドレスが [start, end) のオフセットとともに一覧表示されます — 同じ regex を grep、sed、コードエディタにそのまま流し込むときに役立ちます。
名前付きグループで日付の各部分をキャプチャする
(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2}) /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/g ECMA-262 の名前付きグループは右パネルに $
$1 後方参照による検索と置換
(\w+) (\w+)
Replacement: $2, $1 → Jack Doe → Doe, Jack
番号付きキャプチャグループ 2 つに置換テンプレート $2, $1 を組み合わせると、Replace タブにライブプレビューが表示されます。$&、$`、$'、$$、$
行ごとに末尾の空白を取り除く
[ \t]+$
/[ \t]+$/gm
/g(global)と /m(multiline)を組み合わせると、$ は入力末尾だけでなく各行末でアンカーします。空の置換文字列で Replace タブを開けばクリーンな差分が確認できます: 行末のタブやスペースが消え、本文はそのままです。/s(dotAll)を切ったままなら、. が改行を越えることもありません。
破滅的バックトラックを検出して生き残る
(a+)+b
Test text: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
入れ子の + 量指定子は古典的な ReDoS パターンです。素朴なテスターではタブがフリーズしますが、本ツールでは 250ms のウォールクロックガードが発火し、「Pattern timed out」バナーが表示され、ページは応答性を保ちます。パターンをアンカーするか、重複しない交替に切り替えるか、原子グループ風のイディオムに書き換えて再テストしましょう。
複数の区切り文字で CSV 風の行を分割する
[,;|]\s*
alpha, beta; gamma | delta → ["alpha", "beta", "gamma", "delta"]
Split タブに切り替えます。カンマ、セミコロン、パイプ(任意の空白付き)が分割の境界になります。コピペしたタグリストの整形、ユーザー入力の正規化、本格的な CSV パーサーに渡す前のログフィールドの前処理に便利です — 本物の RFC 4180 データなら CSV to JSON を使ってください。
Regex テスターの使い方
- 1
スラッシュの間にパターンを入力する
ECMA-262 の任意の正規表現を /…/ 欄に投入してください。不正なパターンはパーサーメッセージとともに赤くハイライトされ、有効なパターンはそのままライブマッチに進みます。
- 2
必要なフラグを切り替える
g(global)、i(case-insensitive)、m(multiline)、s(dotAll)、u(unicode)、y(sticky)、d(indices)。各チップは有効時に点灯し、パターン右の読み出し欄に正規のリテラルが表示されます。
- 3
テストテキストを貼り付ける
入力すると、マッチが交互の色でハイライトされます。右側の「マッチ & キャプチャグループ」パネルには、各マッチが [start, end) オフセットとともに表示され、各キャプチャグループの値(名前付きグループは $
でラベル付け)も並びます。 - 4
タブを切り替えて Replace、Split、Explain を使う
Replace は置換テンプレートを入力と並べてプレビューします。Split はマッチの境界ごとに分割します。Explain は各要素にプレーンな説明を添えてパターンをトークン単位で解説します。
- 5
リテラルをコピーするかパーマリンクを共有する
「Copy /pattern/flags」は、JavaScript / TypeScript / Node にそのまま使える正規の regex リテラルをクリップボードに置きます。「Copy link」は全状態を URL ハッシュにエンコード(アップロードなし)するので、同僚はそれをローカルに再現できます。
よくある regex の間違い
/g フラグを忘れて 1 件しかマッチしなかった
/g(または /y)なしでは、エンジンは最初のマッチで停止します。match、matchAll、replace、split のすべてのメソッドが、グローバルフラグの有無で挙動が変わります。/g を有効にして再実行すれば、結果上のカウントが 1 から N に跳ね上がります。
Pattern: /\d+/ → '1 22 333' は ['1'] のみ
Pattern: /\d+/g → '1 22 333' は ['1', '22', '333']
貪欲な量指定子が食べ過ぎた
`.+` は可能なかぎり多く消費するため、` and ` に対する `<.+>` は `` ではなく ` and ` をキャプチャします。怠惰な量指定子(`.+?`)、より制約の強い文字クラス(`[^>]+`)、ルックアラウンドによるアンカリングを使いましょう。
Pattern: /<.+>/ → '<a> and <b>' にマッチ
Pattern: /<[^>]+>/ → '<a>' と '<b>' に別々にマッチ
入れ子量指定子による破滅的バックトラック
`(a+)+b` を長い失敗文字列に当てると指数的に爆発します。「Pattern timed out」バナーが 250ms で発火しますので、入れ子を取り除いて書き直しましょう: `a+b` で同じ仕事を線形時間で行えます。原子グループのシミュレーション `(?=(a+))\1b` も選択肢です。
Pattern: /(a+)+b/ on 'aaaaaaaaaaaaaaaaaaaaac' → タイムアウト
Pattern: /a+b/ 同じ入力に → 即座に 'no match'
$ と ^ は Python の \A、\Z とは違う挙動をする
JavaScript では、`^` と `$` が行頭 / 行末を意味するのは /m が有効なときだけで、それ以外は文字列の先頭 / 末尾を意味します。Python の `\A` と `\Z`(常に文字列境界を意味)は JS には存在しません。必要に応じて /m を切り替えましょう。
Pattern: /^Error/ /m なしのマルチライン log に → 先頭行のみマッチ
Pattern: /^Error/m 同じ入力に → Error で始まる全行にマッチ
文字列で $1 を使ったのに、replace を関数で呼んだ
`text.replace(re, '$1')` は後方参照を展開しますが、`text.replace(re, () => '$1')` はリテラル文字列 '$1' を返します — 関数はテンプレートトークンを認識しないからです。関数の中ではキャプチャグループが位置引数として渡されます。
text.replace(/(\w+)/, m => '$1') → リテラル '$1' を返す
text.replace(/(\w+)/, (_, g1) => g1.toUpperCase()) → キャプチャを使う
Unicode 文字が \w や . にマッチしない
既定の `\w` は `[A-Za-z0-9_]` です。すべてのスクリプトのすべての文字にマッチさせるには /u を有効にし `\p{Letter}`(`\p{L}`)に切り替えましょう。ドットも既定では改行で止まるので、本当に任意の文字が欲しいなら /s(dotAll)を使ってください。
Pattern: /\w+/ は 'hello' にはマッチするが 'héllo' や '你好' にはマッチしない
Pattern: /\p{Letter}+/u 3 つすべてにマッチ PCRE パターンを貼ったら SyntaxError
JavaScript は原子グループ `(?>...)`、占有量指定子 `a++`、インラインモディファイア `(?i)`、条件分岐 `(?(1)yes|no)`、`\A` / `\Z` をサポートしません。パーサーエラーが該当する構文を名指しするので、JS でサポートされる等価な書き方(ルックアラウンドシミュレーション、別途フラグ切り替え、交替)に書き換えましょう。
Pattern: (?i)foo → SyntaxError: invalid group
Pattern: foo に /i フラグを有効化 → 同じ効果
誰がこのツールを使うか
- リリース前にフォーム入力を検証する
- メール / 電話 / 郵便番号 / ユーザー名の regex が、想定どおりにマッチし、想定どおりに弾くことを — Unicode の名前、プラスエイリアス、国際フォーマットなどのエッジケースを含めて — 確認しましょう。バリデーションが本番に届いて実ユーザーを跳ね返す前にできる対策です。
- ログや設定からデータを抽出する
- 任意のログスライスからリクエスト ID、ステータスコード、レイテンシ、スタックトレース行を引き抜くパターンを構築します。名前付きグループでデータが自己記述になり、Matches パネルにはオフセットが表示されるので、同じ regex を後で `rg --replace` や `grep -oE` に渡せます。
- コードベース全体で検索置換する
- リファクタリング用パターン(例: `(\w+)\.apply\(null,\s*\[(.*?)\]\)` → `$1($2)`)をここで下書きし、代表的なスニペットに対して置換結果をプレビューしてから、検証済みの regex をエディタのプロジェクト全体検索置換に自信を持って貼り付けられます。
- ネットで見つけたパターンを健全性チェックする
- StackOverflow やブログから regex をコピーしてきましたか? Explain タブに投入してみてください — 各トークンにプレーンな説明が付きます。微妙な問題(`.+?` のつもりが `.+` になっている、`^`/`$` アンカーが抜けている、意図せず貪欲な量指定子)をコードに着地する前に見つけられます。
- チームメイトに regex を教える
- 動いているパターンで Explain タブを開き、トークン単位で歩いて見せましょう。色分け(escape / quantifier / character class / group / anchor / alternation)により、学習者は文字そのものだけでなく、regex の構造的な形を見られます。
- 言語間でパターンを移植する
- JavaScript で使う必要のある Python や PCRE の regex がありますか? ここに貼り付けてください。パースが通れば Explain が JS 等価のセマンティクスを示し、通らなければパーサーエラーが該当する構文(原子グループ、占有量指定子、インライン `(?i)`)を名指しするので、書き換えるべき場所が即座に分かります。
- 本番の遅い regex をデバッグする
- 本番の regex が破滅的バックトラックを起こしている疑いがあるなら、入力のサンプルとともに本テスターに貼り付けてください。病的なケースでは 250ms のウォールクロックガードが発火し、プロファイラに手を伸ばす前に即座に診断できます — Explain は入れ子量指定子の根本原因も指し示します。
エンジンとアルゴリズムのメモ
- ECMA-262 RegExp エンジン(ネイティブブラウザ)
- `new RegExp(pattern, flags)` と、V8 / JavaScriptCore / SpiderMonkey に搭載されているエンジンを使用します — JavaScript ならどこでも得られる同じ regex セマンティクスです。ここで検証したパターンは Node.js、Deno、Bun、最新ブラウザでそのまま動作します。
- String.matchAll によるマッチ反復
- グローバル反復には手動の lastIndex ループではなく `text.matchAll(regex)` を使います。これによりすべてのマッチがキャプチャグループ、名前付きグループ、(/d 付きで) [start, end] インデックスを保持します。ゼロ幅マッチは標準的な lastIndex の +1 アドバンスで処理し、無限ループを避けます。
- ReDoS 保護のためのウォールクロックタイムアウト
- 250 ミリ秒の予算がすべての match、replace、split 呼び出しをラップします。エンジンは単一のマッチ試行内で内部的にバックトラックできますが、外側の反復は予算と協調動作します — 病的なパターンは `timedOut: true` で中断し、UI はタブをフリーズさせずに警告を出します。
- 置換テンプレートの再実装
- Replace タブは `String.replace` に委譲せず、$1..$N、$&、$`、$'、$$、$
を独自パースします。これにより、名前付きグループテンプレートにエッジケースのある古い Safari や古い Node を含めて、プレビューが全エンジンで同じ挙動になります。出力は最新の JavaScript エンジンが生成するものと完全に一致します。 - Explainer のためのパターントークナイザ
- Explain タブは手書きのトークナイザを実行し、パターンの各フラグメントを分類します(escape / metachar / quantifier / character class / group-open / group-close / anchor / alternation)。なじみのない構造は汎用注記付きの `literal` にフォールバックするので、エクスプレイナーがコンテンツを黙って落とすことはありません。
- URL ハッシュによるパーマリンク(送信されません)
- 共有状態は location.hash フラグメント(`#p=…&f=…&t=…&tab=…`)にエンコードされます。ブラウザは HTTP リクエストでフラグメントを送信しないため、パーマリンクを開いても go-tools.org のサーバーは何も受け取りません。ハイドレーションは受信者のデバイス上で完結します。
Regex のベストプラクティス
- 意図したときにパターンをアンカーする
- `^pattern$` は完全一致;`pattern` はどこでもマッチします。フォーム検証で最も多いバグは、この選択を誤ることです: `^` が欠ければ先頭の `attacker.com/` がドメインチェックをすり抜け、`$` が欠ければ末尾のゴミが通り抜けます。意図的に壊したサンプルを Match タブで試し、何が弾かれるかを確認しましょう。
- 純粋な構造には非キャプチャグループを使う
- `(?:foo|bar)+` と `(foo|bar)+` は機能的に同一ですが、前者はキャプチャグループを確保しません。量指定子や交替のためだけのグループには `(?:…)` を使いましょう — 番号付き $1..$N が安定し、エンジンのわずかな仕事も節約できます。
- ASCII を超えるものには /u フラグを使う
- /u なしだと、ドットや `\w` はサロゲートペア文字(絵文字、BMP 外のコードポイント)を 2 つの UTF-16 ユニットとして扱います。/u 付きなら 1 コードポイントずつ — ユーザーが認識するとおりです。/u は `\p{Letter}` などのプロパティエスケープも有効にします。特別な理由がないかぎり、新しいパターンは /u を既定にしましょう。
- キャプチャグループに名前を付ける
- `(?
\d{4})-(? \d{2})` は自己記述的です。半年後に regex を読み返したとき、`m.groups.year` は明らかに年ですが、`m[1]` はそうではありません。$ を使った置換テンプレートはグループの並べ替えにも耐えます: 位置テンプレートは、誰かがグループを 1 つ追加した瞬間に壊れます。 - 成功ケースだけでなく失敗ケースもテストする
- regex テスターは失敗ケースのためにあります。パターンが何にマッチするかを確認したら、テストテキストを意図的に変更して、何がマッチしないかを見ましょう — 先頭の空白、末尾の空白、欠けた部分、余計な部分、間違った大文字小文字、混在スクリプト。正しい入力は通すがゴミも受け入れるパターンは、本番が最初にあぶり出すバグです。
よくある質問
regex やテストテキストはサーバーに送信されますか?
この regex テスターはどの方言を使いますか — PCRE、Python、Java、JavaScript?
g、i、m、s、u、y、d の各フラグは何をしますか?
キャプチャグループはどう書き、どう参照するのですか?
先読みと後読みはどう動作し、何に便利ですか?
なぜ私の regex はブラウザをフリーズさせるのですか、破滅的バックトラックとは何ですか?
この regex テスターは regex101.com と何が違いますか?
. | ( ) [ ] { } * + ? ^ $ \ などの特殊文字はどうエスケープしますか?
リンクで同僚に regex を共有できますか?
Unicode、絵文字、非ラテン文字はサポートされていますか?
.match、.matchAll、.replace、regex を使った .split の違いは?
Python や Java の regex がここで動かないのはなぜですか?
テキストサイズやマッチ数に上限はありますか?
関連ツール
すべてのツールを見る →テキスト比較と差分検出
テキスト処理
2 つのテキストをブラウザ内で即座に比較。並列ビュー、行内の単語レベルハイライト、統一 diff のエクスポート、大文字小文字・空白・空行の無視に対応。完全ブラウザ内処理でアップロード不要、テキストは端末から出ません。
無料の文字数カウンター & 単語カウントツール
テキスト処理
単語数、文字数、文の数、段落数、読了時間をリアルタイムで計測できます。Twitter、メタディスクリプション、Instagram の文字数制限チェックにも対応。無料・プライベート・登録不要。
進数変換ツール — 2進数・16進数・10進数・8進数
単位変換
無料オンライン進数変換ツール。2進数、8進数、10進数、16進数および任意の基数(2-36)間で数値を瞬時に変換。BigInt対応で桁数制限なし。登録不要・サーバー送信なし、すべての処理がブラウザ内で完結。コピーボタンやコードリテラル出力で開発作業を効率化。
Base64エンコーダー&デコーダー
エンコーディングとフォーマット
Base64のデコード・エンコードが無料でオンラインで行えます。リアルタイム変換、UTF-8・絵文字対応。100%ブラウザ上で動作しデータは外部に送信されません。登録不要。
Crontab ジェネレーター & cron 式ビルダー
日付/時刻ツール
ブラウザ上で cron 式を生成・検証・デコードできます。ローカルタイムまたは UTC での次回実行プレビュー、POSIX 5 フィールド構文、プリセット、自然言語による説明に対応。無料・プライベート・登録不要。
CSV to JSON 変換ツール
エンコーディングとフォーマット
CSVをブラウザ内で即座にJSONに変換。RFC 4180・型推論・ヘッダー行・大整数安全対応。100%プライベート、アップロード不要。