正規表現とは
正規表現(Regex)は、「数字 4 桁、ハイフン、数字 2 桁」のように文字列のパターンを表す書き方です。入力チェック、ログの検索、値の抽出、一括置換などによく使われます。このツールはブラウザの JavaScript エンジンを使うため、結果はブラウザや Node.js の String.prototype.match、replace と同じになります。
使い方
- 前後のスラッシュを付けずにパターンを入力し、必要なフラグにチェックを入れます。
- テストする文字列を貼り付けると、一致した箇所がすべて強調表示されます。隣り合う一致は色を変えて区別できるようにしています。
- 表には一致ごとの位置とキャプチャグループが表示されます。行をクリックすると、文字列内のその箇所が選択されます。
- 「置換後の文字列」を入力すると結果をプレビューできます。グループは
$1、$<name>、一致全体は$&で参照します。
例:日付の形式を変える
パターン (?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2}) は 2024-03-15 のような日付を見つけ、3 つの部分に名前を付けます。$<day>/$<month>/$<year> で置換すると次のようになります。
15/03/2024
よく使う構文
| 構文 | 意味 |
|---|---|
\d | 数字 0-9 の 1 文字 |
\w | 英字、数字、アンダースコア |
\s | 空白文字:スペース、タブ、改行 |
. | 改行以外の任意の 1 文字(s フラグ:すべての文字) |
* + ? | 0 回以上、1 回以上、0 回か 1 回 |
{2,4} | 2〜4 回 |
^ $ | 文字列の先頭と末尾(m フラグ:各行) |
\b | 単語の境界 |
[abc] [^abc] | a、b、c のどれか/それ以外の文字 |
a|b | a または b |
(...) | キャプチャグループ:置換では $1、$2 |
(?:...) | キャプチャしないグループ |
(?<name>...) | 名前付きグループ:置換では $<name> |
(?=...) (?!...) | 後に続く/続かない(先読み) |
よくある質問
どの種類の正規表現を使っていますか?
ブラウザや Node.js と同じ JavaScript(ECMAScript)の正規表現です。構文の多くは Java、Python、PHP、Go でも使えますが違いもあります。たとえば Python の名前付きグループは (?P<name>...) と書きます。また、パターンの先頭に書く (?i) のようなフラグには対応していないので、フラグのチェックボックスを使ってください。
途中でタイムアウトになったのはなぜですか?
(a+)+$ のように繰り返しの中に繰り返しがあるパターンは、エンジンに膨大な組み合わせを試させることがあります(「破滅的なバックトラック」)。このツールはバックグラウンドで実行し、2 秒を超えると止めるので、ページは固まりません。入れ子の繰り返しを避けるようにパターンを書き直してください。同じパターンはサーバーを止めてしまうおそれもあります。
バックスラッシュは 2 つ書く必要がありますか?
ここでは不要で、\d とそのまま入力します。Java、C#、JavaScript のコードの文字列(/.../ の書き方ではないもの)に貼り付けるときは、"\\d{4}" のようにバックスラッシュを 2 つずつ書きます。
入力した文字列はサーバーに送信されますか?
いいえ。一致の検索と置換はすべてブラウザ内で行われるので、外に出せないログやデータでも安心してテストできます。