Skip to content

無料の Regex テスター — パターンをオンラインでデバッグ & マッチ

任意のテキストに対して regex パターンを即座にテストできます。リアルタイムのマッチハイライト、キャプチャグループ、置換プレビュー、分割、パターン解説に対応。JavaScript 系の正規表現を 100% プライベートに、登録不要で利用できます。

トラッキングなし ブラウザで動作 無料
すべてのテストはブラウザ内でローカルに実行されます。あなたのパターンとテキストはこのデバイスから出ません。
フラグ
ハイライト表示されたマッチ
マッチ & キャプチャグループ
ECMA-262 への忠実性、(/d フラグ有無双方での) キャプチャグループの正確性、String.prototype.replace との置換テンプレートの同等性、ウォールクロック予算による ReDoS 耐性、アクセシビリティ(ARIA ロール、スクリーンリーダーによるマッチアナウンス、RTL/LTR 処理)についてレビュー済みです。 — Go Tools テキストツーリングチーム · May 21, 2026

本チームは、regex の出力を ECMA-262 仕様、Node.js の RegExp 挙動、および V8 / JavaScriptCore / SpiderMonkey のクロスエンジン互換テストに対して検証しています。ReDoS 予算は、Snort と OWASP の regex-DoS コーパスに記録された最悪ケースのパターンに合わせてキャリブレーションされています。

正規表現テスターとは?

正規表現テスター(regex テスター)は、regex パターンを書き、テストテキストを貼り付け、パターンが何にマッチするかを正確に確認できるツールです — キャプチャグループ、置換プレビュー、フラグの解説まで揃い、コードを再コンパイルしたりスクリプトを走らせたりする必要がありません。開発者にとっては、ループを分単位からミリ秒単位に縮めます: パターンを微調整し、ハイライトの動きを観察し、自信を持って regex をデプロイできます。

正規表現はテキストパターンを記述するためのコンパクトな言語です。\d+ は 1 桁以上の数字にマッチします。[A-Za-z_]\w* は典型的な識別子にマッチします。(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2}) は ISO 日付にマッチし、各部分に名前を付けます。正規表現はあらゆるコードエディタの検索置換、あらゆるフォームのバリデーション、あらゆるオブザーバビリティスタックのログ解析、そしてインターネットの半分を動かしている Unix ツール grepsedawk の根幹です。同時に、正しく書くのが難しいことで有名でもあります: 量指定子の 1 文字ずれや、エスケープし損ねた 1 文字で、誤った部分文字列にマッチしたり、マッチを取りこぼしたり、最悪の場合は破滅的バックトラックで CPU コアを人質にされたりします。優れた regex テスターは、それらの失敗モードを本番に届く前に捕捉します。

本テスターは、最新ブラウザに搭載されているネイティブの ECMA-262 RegExp エンジン上で動作します — JavaScript、TypeScript、Node.js、Deno、Bun から呼び出すのと同じエンジンです。つまり: キャプチャグループ(番号付きと (?<name>...) による名前付き)、先読みと後読みのアサーション((?=...)(?!...)(?<=...)(?<!...))、7 つの正規フラグ(g、i、m、s、u、y、d)、/u 下の Unicode プロパティエスケープ(\p{Letter}\p{Script=Han})、\d 系の文字エスケープが揃います。ここで検証したパターンは、コードベースにそのまま貼り付けても変更不要で動作します。PCRE、Python、Java から移植している場合は、Explain が各トークンを分解してくれるので、翻訳できない構文(原子グループ、占有量指定子、インラインモディファイア)を見つけやすくなります。

テスターが生のマッチを超えて表示するもの: 「マッチ & キャプチャグループ」パネルは、各マッチを [start, end) オフセットと各キャプチャグループの値とともに一覧表示します — String.prototype.matchAll を /d フラグ付きで呼び出したときと同じ情報を、視覚的に読みやすく並べたものです。Replace タブは $1 / $& / $` / $' / $$ / $<name> の置換アルファベットをフルサポートしたライブプレビューを示します — JavaScript の String.replace が受け付けるとおりです。Split タブは regex で String.split を呼び、各部分を表示します。Explain タブはパターンをトークン化し、それぞれにプレーンな説明を付けます — コードレビュー、教育、方言間の移植に便利です。

プライバシーについて: すべての操作はローカルです。あなたのパターンとテストテキストはページを離れません — ログにも残らず、分析サービスにも送られず、ディスクにも保存されません。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) オフセット、フルマッチのテキスト、内部の番号付き + 名前付きキャプチャグループすべてが揃います。名前付きグループは $<name> としてラベル付けされ、コードで消費するときと同じ読み方ができます。

$1 / $& / $<name> によるライブ置換プレビュー

Replace タブに切り替えると、置換がリアルタイムで適用されます。ECMAScript の置換アルファベットがフルサポート: 位置参照の $1..$N、名前付きの $<name>、マッチ全体の $&、前後の $` と $'、リテラルドルの $$。入力と出力のパネルが並び、ワンクリックでコピーできます。

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 の名前付きグループは右パネルに $<year>、$<month>、$<day> として表示されます。Replace タブに切り替えて $<day>/$<month>/$<year> を試すと、ISO 日付を DMY 形式に 1 回で変換できます — まったく同じ手法が最新の JS の replace 呼び出しで使えます。

$1 後方参照による検索と置換

(\w+) (\w+)
Replacement: $2, $1   →   Jack Doe → Doe, Jack

番号付きキャプチャグループ 2 つに置換テンプレート $2, $1 を組み合わせると、Replace タブにライブプレビューが表示されます。$&、$`、$'、$$、$<name> もすべてサポートしています — ECMAScript 仕様の置換アルファベットそのものなので、コピーしたものはあらゆる JS エンジンでそのまま動作します。

行ごとに末尾の空白を取り除く

[ \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. 1

    スラッシュの間にパターンを入力する

    ECMA-262 の任意の正規表現を /…/ 欄に投入してください。不正なパターンはパーサーメッセージとともに赤くハイライトされ、有効なパターンはそのままライブマッチに進みます。

  2. 2

    必要なフラグを切り替える

    g(global)、i(case-insensitive)、m(multiline)、s(dotAll)、u(unicode)、y(sticky)、d(indices)。各チップは有効時に点灯し、パターン右の読み出し欄に正規のリテラルが表示されます。

  3. 3

    テストテキストを貼り付ける

    入力すると、マッチが交互の色でハイライトされます。右側の「マッチ & キャプチャグループ」パネルには、各マッチが [start, end) オフセットとともに表示され、各キャプチャグループの値(名前付きグループは $<name> でラベル付け)も並びます。

  4. 4

    タブを切り替えて Replace、Split、Explain を使う

    Replace は置換テンプレートを入力と並べてプレビューします。Split はマッチの境界ごとに分割します。Explain は各要素にプレーンな説明を添えてパターンをトークン単位で解説します。

  5. 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']

貪欲な量指定子が食べ過ぎた

.+ は可能なかぎり多く消費するため、<a> and <b> に対する <.+><a> ではなく <a> and <b> をキャプチャします。怠惰な量指定子(.+?)、より制約の強い文字クラス([^>]+)、ルックアラウンドによるアンカリングを使いましょう。

✗ 誤り
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 --replacegrep -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、$&、$`、$'、$$、$<name> を独自パースします。これにより、名前付きグループテンプレートにエッジケースのある古い 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 を既定にしましょう。
キャプチャグループに名前を付ける
(?<year>\d{4})-(?<month>\d{2}) は自己記述的です。半年後に regex を読み返したとき、m.groups.year は明らかに年ですが、m[1] はそうではありません。$<name> を使った置換テンプレートはグループの並べ替えにも耐えます: 位置テンプレートは、誰かがグループを 1 つ追加した瞬間に壊れます。
成功ケースだけでなく失敗ケースもテストする
regex テスターは失敗ケースのためにあります。パターンが何にマッチするかを確認したら、テストテキストを意図的に変更して、何がマッチしないかを見ましょう — 先頭の空白、末尾の空白、欠けた部分、余計な部分、間違った大文字小文字、混在スクリプト。正しい入力は通すがゴミも受け入れるパターンは、本番が最初にあぶり出すバグです。

よくある質問

regex やテストテキストはサーバーに送信されますか?
いいえ。マッチ、置換、分割、解説のすべての操作は、ネイティブの RegExp エンジンを使ってブラウザ内の JavaScript で実行されます。あなたのパターンやテキストはアップロードされず、ログにも記録されず、ディスクにも保存されず、サードパーティにも送信されません。localStorage に保存されるのは UI 設定(アクティブなタブと普段使っているフラグ)だけで、次回訪問時にページが状態を覚えるためのものです — パターンやテストテキストは保存しません。DevTools → Network を開いて確認できます: どちらの入力欄に文字を打ってもリクエストはゼロです。社外秘のパターン、編集済みのログサンプル、内部設定など regex101 に貼り付けたくないものでも安全に扱えます。
この regex テスターはどの方言を使いますか — PCRE、Python、Java、JavaScript?
ECMA-262(JavaScript)です — V8、JavaScriptCore、SpiderMonkey で実装されている方言、つまりブラウザ、Node.js、Deno、Bun で new RegExp(pattern, flags) を使ったときに得られるのと同じエンジンです。サポートされる機能は: キャプチャグループ(番号付きと (?<name>...) による名前付き)、先読み (?=...) / (?!...)、後読み (?<=...) / (?<!...)、7 つのフラグ g/i/m/s/u/y/d、/u 下の Unicode プロパティエスケープ(\p{Letter})、後方参照 \1..\9。PCRE 限定の機能(原子グループ (?>...)、占有量指定子 a++、条件分岐 (?(1)yes|no)、インラインモディファイア (?i))はシンタックスエラーになります。Python の re.VERBOSE もここではサポートされません。Python / Java / Go の regex を扱うなら、パターンをそれぞれのエンジンに移植してください — 単純なパターンの多くはそのまま通り、解説機能は方言中立です。
g、i、m、s、u、y、d の各フラグは何をしますか?
g(global)— 最初の 1 件ではなくすべてのマッチを取得;.matchAll での反復やグローバル置換に必須。i(case-insensitive)— A と a を同じ文字として扱う。m(multiline)— ^ と $ が各改行でアンカーされ、入力全体の先頭・末尾だけにはならない。s(dotAll)— . が改行にもマッチ;/s なしだとドットは \n で止まる。u(unicode)— \u{HHHH} エスケープと Unicode プロパティエスケープ(\p{Letter})を有効化し、パターンを UTF-16 コードユニットではなく Unicode コードポイントの列として扱う。y(sticky)— 各マッチを lastIndex でアンカーし、トークナイザーで重宝。d(hasIndices、ES2022)— .indices.indices.groups を [start, end] のペアで埋める;このテスターは内部で /d を使ってグループの境界を描画しています。テストテキストの上のチップで切り替えられ、正規の /pattern/flags リテラルが読み出し欄に表示されます。
キャプチャグループはどう書き、どう参照するのですか?
サブパターンを括弧でくくります: (\d{4})-(\d{2})-(\d{2}) で 3 つの位置グループが得られ、置換時は $1、$2、$3、Matches パネルでは m.groups[0..2] でアクセスできます。名前付きグループは (?<name>...) を使います: (?<year>\d{4})-(?<month>\d{2}) なら置換テンプレートで $<year>/$<month> と書けます。量指定子だけのためにグループ化したい場合は (?:...) の非キャプチャグループを使います((?:foo|bar)+)— 後方参照を作らないので、番号付きの $1..$N が安定します。同じパターン内では \1\2 などで以前のキャプチャを参照できます — \b(\w+)\s+\1\b で重複した単語を見つけるのに便利です。
先読みと後読みはどう動作し、何に便利ですか?
ルックアラウンドはゼロ幅アサーションで、文字を消費せずに何かがマッチする(しない)ことを確認します。(?=foo)(肯定先読み)は現在位置の後ろに foo があれば成功;(?!foo)(否定先読み)は foo が続かないときに成功します。(?<=foo)(?<!foo) はそれらの後読み版です。実用例: 前後の文字を含めずに部分文字列を抽出する((?<=\$)\d+ はドル記号の後ろの数字にマッチしますが、$ はマッチに含まれません)、1 つのパターンで複数の制約を検証する((?=.*[A-Z])(?=.*\d).{8,} で大文字 1 つ以上、数字 1 つ以上、8 文字以上を要求)、出現を禁止する(^(?!.*\bpassword\b) で password を含む行を拒否)。最新の ECMA-262 では可変長後読みもサポートされるので、(?<=^prefix-?) も動作します。
なぜ私の regex はブラウザをフリーズさせるのですか、破滅的バックトラックとは何ですか?
破滅的バックトラックは、重複する選択肢の上に量指定子が入れ子になったときに発生します — 古典的な形は (a+)+(a|aa)+(\w*)*(?:a|a?)+。最後の文字でマッチが失敗するような入力では、エンジンが諦めるまでに指数的な数のグループ分割を試行します。aaaaaaaaaaaaaaaaaaaaab に対するパターン (a+)+b で言えば、答えを出すまでに 2^21 ≈ 200 万回のバックトラックが発生します。本テスターはすべてのマッチ呼び出しを 250ms のウォールクロック予算でラップしており、予算を超えると反復は停止し「Pattern timed out」警告が表示されます。修正策: パターンを境界にアンカーする(^...$)、重複しない選択肢を選ぶ((a|aa) ではなく (a|b))、入れ子の量指定子を展開する((a+)+ ではなく a+)、占有量指定子風のイディオムに書き換える((?=(a+))\1 で JS 上 a++ を擬似的に再現)。
この regex テスターは regex101.com と何が違いますか?
違いは 3 点。(1) プライバシー: regex101 はキー入力ごとにバックエンド評価のためサーバーにデータを送り、共有コミュニティリンクにパターンを保存します。本ツールはブラウザ内で完結し、ネットワーク通信はゼロです。(2) スピード: 変更ごとのサーバーラウンドトリップで 80〜300ms 上乗せされますが、ここでは長文でもマッチが 10ms 未満で更新されます。(3) 方言フォーカス: regex101 は機能フラグ UI で PCRE、Python、Java、.NET、JavaScript、Rust、Go をサポート;本ツールは ECMA-262(JavaScript)— ブラウザ、Node、Deno、Bun に搭載される方言 — に絞り、解説とパーマリンクをその単一方言向けに最適化しています。PCRE 限定機能が必要なら regex101 が正解;JavaScript / TypeScript 作業にはこちらが速くプライベートです。ここでのパーマリンクは URL ハッシュ(アップロードなし)なので、共有リンクは受信者のマシンでローカルにパターンを再現します。
. | ( ) [ ] { } * + ? ^ $ \ などの特殊文字はどうエスケープしますか?
前にバックスラッシュを付けます: \.\|\(\)\[\]\{\}\*\+\?\^\$\\。スラッシュ / は文字列として渡すパターンではエスケープ不要です(JS の regex リテラルでスラッシュに挟む場合のみ必要)。文字クラス [...] の中ではほとんどのメタ文字が特別な意味を失うため、[.][*][+] はすべてリテラルにマッチします — 文字クラス内で特殊なまま残るのは ]\^(先頭で否定するときのみ)、-(2 文字の間にあるとき範囲を示す)だけです。迷ったら、リテラル文字列をそのままパターンに貼り付けて Explain を動かしてみてください: ブレイクダウンパネルにすべてのエスケープシーケンスの説明が 1 行ずつ表示されます。
リンクで同僚に regex を共有できますか?
はい — しかもリンクにはサーバーラウンドトリップがありません。アクションバーの「リンクをコピー」をクリックすると、テスターはパターン、フラグ、テストテキスト、アクティブなタブを URL ハッシュにエンコードします(#p=...&f=gim&t=...&tab=match)。リンクを開いた人は同じ状態でページがハイドレートされます — 受信者のマシン上でローカルに復元されます。データはハッシュフラグメントに置かれるため、go-tools.org のサーバーには送信されず(ブラウザはフラグメントをリクエストで送信しません)、アクセスログにも記録されません。リンクはテキストのサイズに応じて長くなるので、2KB を超えるサンプルは「Copy /pattern/flags」で regex だけコピーし、テキストは別途貼り付けてください。実テキストを共有せずに regex レビューしたいなら、パターンとフラグだけ共有し、受信者は自分のコーパスを貼り付ければ同じマッチが得られます。
Unicode、絵文字、非ラテン文字はサポートされていますか?
はい。/u フラグを有効にすると完全な Unicode 処理に切り替わります: \w は既定ではラテンの単語文字にマッチしますが(既定のセマンティクス)、/u を併用すれば Unicode プロパティエスケープで広いカテゴリにマッチできます — \p{Letter} ですべての文字、\p{Script=Han} で漢字、\p{Emoji} で絵文字、\p{Number} ですべての数字 / 数値にマッチします。/u なしでは、👨‍💻 のようなサロゲートペアの絵文字は 2 つの UTF-16 コードユニットとして扱われ、^.$ のようなパターンはマッチしません;/u を付ければドットは各書記素コードポイントを 1 文字として扱います。RTL スクリプト(アラビア語、ヘブライ語)では特別な対応なしにパターンが動作します — 方向はレンダリング時の関心事であり、regex エンジンの関心事ではありません。CJK のコンテンツもラテンと同じ要領でマッチします。
.match、.matchAll、.replace、regex を使った .split の違いは?
String.prototype.match は最初のマッチを返します(/g 設定時は全マッチの配列)が、/g を付けるとキャプチャグループが失われます。String.prototype.matchAll は /g が必須で、マッチ配列のイテレータを返し、キャプチャグループとインデックスも含みます — 本テスターが内部で使っているのはこれです。String.prototype.replace は文字列テンプレート($1、$& など)か、(match, ...groups, offset, string, namedGroups) で呼ばれるコールバックを受け取ります。String.prototype.split はマッチごとに分割します — /g と組み合わせても便利ですが、split のセマンティクスではグローバルフラグは無視されます。本ツールでは Match タブで match、Replace で replace、Split で split を露出させており、ページを離れずにすべての挙動をプレビューできます;コードに貼り付ける準備ができたら、リテラル /pattern/flags は 1 クリックで取得できます。
Python や Java の regex がここで動かないのはなぜですか?
本テスターは ECMA-262(JavaScript)を動かしているからです — 多くのパターンはきれいに移植できますが、一部は移植できません。よくある落とし穴: (1) Python のインラインフラグ (?i)(?x) は JS では無効です — 代わりに上のフラグチップを使ってください。(2) Python の \A\Z は JS では ^$ です(行アンカーには /m)。(3) Java / Python の条件分岐 (?(name)yes|no) は JS ではサポートされません — 交替で書き直してください。(4) 占有量指定子 a++ と原子グループ (?>...) は JS では使えません — (?=(a+))\1 で擬似的に再現します。(5) Python の (?P<name>...) は JS では (?<name>...) です。(6) 水平空白の \h と垂直空白の \v は JS にはありません — [ \t][\n\r] で代用してください。移植性のあるポートには Explain がトークンごとに何をしているか分解してくれるので、サポート外の構文を等価な書き方に置き換えやすくなります。
テキストサイズやマッチ数に上限はありますか?
実用上の上限: テストテキスト約 200,000 文字、同時にハイライト表示されるマッチ 500 件。500 件を超えると Matches パネルに「Showing first 500」のバナーが表示されますが、カウントバッジは引き続き正確な総数を示します。250ms のウォールクロック予算は、サイズに関係なく暴走パターンを抑え込みます。マルチメガバイトのログファイルには、コマンドラインの grep -oErg(ripgrep)で regex を実行してください — ストリーミング処理で UI の描画上限にも当たりません。巨大なテキストの単発スキャンには、代表的なスライスを本テスターに貼ってパターンを検証し、検証済みのパターンをシェルでファイル全体に適用するワークフローが向いています。

ケース変換ツール — UPPERCASE、lowercase、camelCase ほか

テキスト処理

テキストを UPPERCASE、lowercase、Title Case、Sentence case、camelCase、PascalCase、snake_case、kebab-case、CONSTANT_CASE など 15 形式へ即座に変換。無料・ブラウザ完結・登録不要。

Lorem Ipsum ジェネレーター — 無料プレースホルダー生成

テキスト処理

Lorem Ipsum のプレースホルダーテキストを即座に生成 — 段落・文・単語・バイト・リスト単位で。プレーンテキスト、HTML、Markdown、JSON でコピーまたはダウンロード。100% 無料、プライバシー重視、ブラウザ内処理。登録不要。

テキストから重複行を削除

テキスト処理

テキストから重複行をオンラインで削除 — 無料・即時・100% ブラウザ完結。大文字小文字や空白を無視、最初または最後の出現を保持し、削除した重複数を表示。ソートや整理も可能。登録不要。

URL スラッグ生成ツール — テキストをスラッグ化

テキスト処理

任意のタイトルやテキストを、SEO に強いクリーンな URL スラッグへ即座にスラッグ化。アクセント記号やキリル文字を ASCII に翻字、または Unicode 文字をそのまま維持。Convert ボタン不要、100% プライベートでブラウザ完結、登録不要。

テキスト行をアルファベット順・自然順にソート

テキスト処理

テキストの行をアルファベット順・数値対応の自然順・長さ順で、昇順または降順にソート。無料のオンライン行ソートツールで 100% ブラウザ完結。重複削除・逆順・リスト整理も可能。登録不要、アップロードなし。

テキスト比較と差分検出

テキスト処理

2 つのテキストをブラウザ内で即座に比較。並列ビュー、行内の単語レベルハイライト、統一 diff のエクスポート、大文字小文字・空白・空行の無視に対応。完全ブラウザ内処理でアップロード不要、テキストは端末から出ません。