Yueser

一括置換

正規表現とキャプチャグループに対応($1 参照)、置換する前にヒット数を確認してください。


  
正規表現のヒント

〜で (\d+) のようなキャプチャグループを使う場合、置換欄では $1 参照;$& はマッチ全体を意味します。正規表現を間違えるとすぐにエラーになり、テキストは変更されません。

使う場面

  • 書き出したデータに全角括弧・連続スペース・改行しない空白(U+00A0)が混ざっていて一括で消したいとき。正規表現で [\u00A0 ]+ と書くほうが手作業より速いです。
  • 2024-01-05 のような日付を 2024/01/05 に一括で変えたいとき、または各電話番号の前に国番号を足しつつ、元の数字をキャプチャグループで残したいとき。

使わないほうがよい場面

  • 複数行にまたがる一致や、行ごとの ^ $ が必要なとき。このページは常に g と任意の i を使い、m と s がないため、^ は全体の先頭だけに一致し、. は改行を越えません。
  • 置換に条件分岐が必要なとき(ケースごとに別の文字列にする、値を計算する)。正規表現を重ねるより、sed や Python のスクリプトのほうが確実です。
制限とプライバシー

置換はブラウザ内で完結し、テキストは送信されません。制限:正規表現は常に g と任意の i のみで、m・s・u がないため ^ $ は全体にしか効かず、. は改行を越えず、\p{...} は使えません。入力は純粋なテキストとして扱い、HTML や CSV の構造は解析しません。数 MB を超えると一括置換で明確に重くなります。

よくある質問

正規表現を間違えると本文が壊れますか?

壊れません。入力欄は書き換えられず、結果は出力欄にだけ出ます。正規表現のコンパイルに失敗した場合、置換は実行されず出力欄は前回のままです。ただしエラーはブラウザのコンソールにしか出ないため、画面上は無反応に見えます。括弧の閉じ忘れや [ の閉じ忘れが原因のことが多いです。

\p{L} や \u{1F600} が何にも一致しないのはなぜ?

正規表現を new RegExp(..., 'gi') で組み立てており u フラグがないため、\p は文字 p、\u{1F600} は文字列 u{1F600} として扱われます。エラーにはならず、一致もしません。Unicode プロパティやコードポイント表記を使いたい場合は、サロゲートペア(\uD83D\uDE00)か実際の文字で書いてください。

置換欄の $1 や
amp; は何ですか?存在しない番号を書くと?

$1 は 1 番目のキャプチャグループ、amp; は一致全体、$ はドル記号 1 つです。存在しないグループ(括弧が 1 組しかないのに $2 など)を指定すると、$2 はそのまま文字として残ります。正規表現を使わないモードも String.replace を通るため、amp; はそこでも有効です。