正規表現テスト
実際のテキストに対してパターンをブラウザ内でテストします。
マッチ
| # | 種類 | 値 | 位置 |
|---|
ブラウザ内で動作します。入力した内容はどこにも送信されません。
- マッチをリアルタイムでハイライト
- 名前付き・番号付きグループに対応
- ワーカー内で安全に実行
正規表現のテスト方法
- パターンを入力または貼り付け、必要なフラグを選びます。
- マッチさせたいテキストを貼り付けます。
- ハイライトされたマッチ、グループの表、置換結果を確認します。
正規表現構文クイックリファレンス
| パターン | マッチする内容 |
|---|---|
| \d | 0から9までの任意の数字 |
| \w | 任意の文字、数字、_(アンダースコア) |
| \s | 任意の空白文字 |
| + | 直前のトークンの1回以上の繰り返し |
| * | 直前のトークンの0回以上の繰り返し |
| ? | 0回か1回、または直前の量指定子を非貪欲にする |
| ^ and $ | 文字列または行の先頭と末尾 |
JavaScriptの正規表現の機能
| 機能 | 構文 | 備考 |
|---|---|---|
| 名前付きグループ | (?<name>...) | ES2018から対応 |
| 後読み(lookbehind) | (?<=...) and (?<!...) | ES2018から対応 |
| Unicodeモード | uフラグ | \p{Letter}のようなUnicodeプロパティエスケープに必要 |
| 大文字小文字を区別しない | iフラグ | 他の多くの言語と同じ考え方 |
パターンを書くコツ
- . ( ) [ ]などの特殊文字をそのままの文字として使いたい場合は、バックスラッシュでエスケープします。
- 後でそのマッチを参照する必要がない場合は、非キャプチャグループ(?:...)でグループ化します。
- 貪欲な量指定子はできるだけ多くマッチしようとします。+?のように後ろに?を付けると非貪欲になり、最初にマッチした時点で止まります。
- マッチさせたいテキストだけでなく、空文字列や余分な空白などの境界ケースでもテストしましょう。
正規表現テストのFAQ
パターンが応答しなくなったのはなぜですか?
一部のパターンは特定のテキストに対して指数関数的にバックトラックすることがあります。マッチ処理はバックグラウンドワーカーで1.5秒の制限付きで実行されるため、暴走したパターンはタブをフリーズさせる代わりに停止します。
フラグはそれぞれ何を意味しますか?
gは最初の1件だけでなくすべてのマッチを探し、iは大文字小文字を無視し、mは^と$を行単位でマッチさせ、sは.を改行にもマッチさせ、uは完全なUnicodeモードを有効にし、yは前回の位置にマッチを固定し、dは各マッチの開始・終了位置を追加します。
置換欄はテスト文字列を変更しますか?
いいえ。String.replaceが生成する結果を別の結果欄に表示するだけなので、入力したテスト文字列はそのまま残ります。
名前付きキャプチャグループには対応していますか?
はい。(?<name>...)のようにグループを書くと、マッチ表のグループ番号の横に名前が表示されます。
入力したテキストはどこかに送信されますか?
いいえ。マッチ処理は自分のブラウザタブ内のワーカーで実行され、入力した内容がページの外に出ることはありません。
どの正規表現の方言を使っていますか?
ブラウザ標準のJavaScriptのRegExpエンジンで、Webアプリやスクリプトを作る際にパターンを実行するのと同じものです。
catastrophic backtracking(破滅的バックトラッキング)とは何ですか?
(a+)+bのようにネストした繰り返しグループを持つパターンが、入力がたった1文字増えるだけで失敗までの時間が指数関数的に長くなる現象です。ここでの1.5秒のワーカータイムアウトが、ページをフリーズさせる前にそうしたパターンを捕まえます。
^と$は文字列全体だけでなく、各行の先頭と末尾にもマッチできますか?
はい、m(複数行)フラグを有効にしてください。無効のままだと、^と$はテスト文字列全体の先頭と末尾にのみマッチします。