検索と置換・正規表現の実践パターン集
テキスト整形にすぐ使える JavaScript 正規表現の検索と置換パターン13選。日付形式の変換、電話番号のマスキング、括弧内の削除、行末の空白の削除と $1 の使い方を解説。
検索と置換 は通常モードと正規表現モードの両方に対応しています。通常モードは入力した文字をそのまま検索し、正規表現モードはパターンで検索します。この記事では、正規表現モードのルールとよく使うパターンをまとめます。
このツールの正規表現のルール
- 文法はブラウザの JavaScript 正規表現です。
g(すべて置換)、m(複数行)、u(Unicode)のフラグが自動で付きます。「大文字・小文字を区別しない」をオンにするとiが加わります。mフラグがあるため、^と$はテキスト全体ではなく各行の先頭と末尾にマッチします。uフラグがあるため、不要なバックスラッシュはエラーになります。たとえば\:は書けず、:と書く必要があります。\p{L}のような Unicode プロパティは使えます。- 置換後の内容では、
$1、$2はキャプチャグループ、$&はマッチ全体、$$は$1文字です。\nは改行、\tはタブになります。 - パターンにエラーがある場合、そのステップは入力を変えずにエラーを表示します。
\sは改行にもマッチします。行をまたがずに空白だけを探すなら[ \t]を使ってください。
実践パターン
以下は「検索する内容 → 置換後の内容」の形式です。置換後の内容が「(空欄)」なら、欄を空のままにしてください。
1. 日付の形式を変える
(\d{4})-(\d{2})-(\d{2}) → $1.$2.$3
2026-09-23 → 2026.09.23
順番を入れ替えるには、$3/$2/$1 のようにグループ番号の位置を入れ替えます。
2. 携帯電話番号の中央を伏せる
(01[016789])-?(\d{3,4})-?(\d{4}) → $1-****-$3
010-1234-5678 → 010-****-5678 01098765432 → 010-****-5432
これは 010 などで始まる韓国の携帯番号向けのパターンです。日本の携帯番号(090・080・070)なら、最初のグループを (0[789]0) に変えると 090-1234-5678 が 090-****-5678 になります。
3. メールアドレスの先頭を伏せる
\b([A-Za-z0-9._%+-]{2})[A-Za-z0-9._%+-]*@ → $1***@
hong.gildong@example.com → ho***@example.com
4. 括弧とその中身を削除
\s*\([^)]*\) → (空欄)
東京(本社) 大阪 (支社) → 東京 大阪
((a)) のように括弧が入れ子になった構造は、一度では削除しきれないことがあります。なお、このパターンが対象にするのは半角の ( ) だけです。全角の ( ) には、先に「全角 ↔ 半角の変換」で半角に変換してから適用してください。
5. 行末の空白を削除
[ \t]+$ → (空欄)
6. 3行以上の改行を空行1行に
\n{3,} → \n\n
7. 数値の3桁区切りのカンマを削除
(\d),(?=\d{3}\b) → $1
1,234,567円 → 1234567円
8. URLのクエリ・ハッシュを削除
(https?:\/\/[^\s?#]+)[?#]\S* → $1
https://example.com/page?utm_source=a#top → https://example.com/page
9. チャット履歴の先頭の時刻を削除
^\[?\d{1,2}:\d{2}(?::\d{2})?\]?[ \t]* → (空欄)
[12:30] こんにちは → こんにちは
10. 「姓, 名」の順番を入れ替える
^([^,\n]+),[ \t]*(.+)$ → $2 $1
Kim, Minsu → Minsu Kim
11. 繰り返された単語を1つに
\b(\w+)[ \t]+\1\b → $1(「大文字・小文字を区別しない」をオンにすると The the も見つけます)
12. ハングルと英字の間に空白を入れる
(\p{Script=Hangul})([A-Za-z]) → $1 $2
한글abc → 한글 abc
スクリプト名を \p{Script=Han}(漢字)などに変えれば、同じ考え方をほかの文字にも使えます。
13. 数値を角括弧で囲む
\d+(?:\.\d+)? → [$&]
よくある間違い
- ピリオド(.)をそのまま使う: 正規表現で
.は任意の1文字を意味します。ピリオドやドメインのドットを探すなら\.と書いてください。example.comはexampleXcomにもマッチします。 - 欲張りな .\*:
<.*>は1行の中で最初の<から最後の>までをまるごとつかみます。<b>x</b> <i>y</i>に適用すると、文字まですべて消えてしまいます。タグを1つずつつかむなら<[^>]*>や<.*?>を使います。 - 置換後の内容の $: 正規表現モードで価格表示のように置換後の内容に
$を入れるには、$$と書く必要があります。通常モードでは$がそのまま入ります。 - 特殊文字を文字として探す:
( ) [ ] + ? *を探すには、前にバックスラッシュを付けます。記号が多いなら、正規表現をオフにして通常モードで探すほうが簡単です。
複数行をまとめて扱う
検索する内容に \n を入れると、改行そのものを探せます。たとえば ,\n → , は、カンマで終わる行を次の行とつなげます。行全体を削除するのが目的なら、正規表現より 行フィルター のほうが簡単です。文単位で行を分けるなら、改行を追加(分割) の「文末」基準のほうが安全です。
順番が大切です
検索と置換のステップは1つのパイプラインに複数入れられ、上から順番に適用されます。前のステップの結果が次のステップの入力になるので、先に空白を整理しておかないとパターンがマッチしないこともよくあります。前後の空白を削除 と 連続する空白・タブを整理 を前に置けば、パターンをシンプルに書けます。
チェックリスト
- 行単位のパターンには
^と$を使う。 - 行をまたがないように、
\sの代わりに[ \t]を使う。 - 結果を確認し、間違っていたらステップをオフにしてパターンを直す。
最終更新: 2026-09-23