JavaScript 逆引き集 | 正規表現で置換(全体)

JavaScript JavaScript
スポンサーリンク

「パターンに合うところを全部置き換える」という発想

s.replace(/a/g, 'b') は、文字列の中で「正規表現にマッチした部分」を、まとめて別の文字列に置き換えるメソッドです。 ここでは /a/g が「置き換え対象を表すパターン」、'b' が「置き換え後の文字列」です。

天才プログラマー視点で言うと、「文字列の中の特定のパターンを一括で修正するための道具」replace + 正規表現です。

基本イメージ:すべての「a」を「b」に変える

まずはそのままの例から。

const s = "aaa";
const t = s.replace(/a/g, "b");

console.log(t); // "bbb"
JavaScript

/a/g は「文字 a にマッチする正規表現」で、g は「global(全体)」フラグです。 この g が付いていることで、文字列全体を走査して、すべての a を置き換えます。

g を付けないとどうなるかも見ておきましょう。

const s = "aaa";
const t = s.replace(/a/, "b");

console.log(t); // "baa"
JavaScript

g がない場合は、最初にマッチした 1 か所だけが置き換えられます。 「全部変えたいなら g を付ける」が、ここでの一番重要なポイントです。

正規表現を使う意味を少し深掘りする

replace は、単純な文字列でも使えます。

const s = "foo foo";
const t = s.replace("foo", "bar");

console.log(t); // "bar foo"
JavaScript

ただし、この場合も「最初の 1 か所だけ」です。 「全部」をやりたいときに、正規表現+g が本領を発揮します。

さらに、正規表現を使うと「形」で指定できるようになります。

const s = "ID: 123, Code: 456";
const t = s.replace(/\d+/g, "###");

console.log(t); // "ID: ###, Code: ###"
JavaScript

ここでは、\d+ が「1文字以上の数字」という意味で、 数字のかたまりを全部 "###" に置き換えています。

「この形をした部分だけ全部変えたい」という要求を、1本のパターンで書けるのが正規表現+replace の強さです。

例題:改行コードを統一する

実務でよくあるのが、「改行コードがバラバラ問題」です。 \r\n(Windows)と \n(Unix)が混ざっていると扱いづらいので、統一したくなります。

const s = "line1\r\nline2\r\nline3\n";
const t = s.replace(/\r\n/g, "\n");

console.log(t);
/*
line1
line2
line3
*/
JavaScript

ここでは、 \r\n を正規表現で指定し、全部 \n に置き換えています。

「文字列の中の特定のパターンを一括で修正する」という典型的な使い方です。

置換後の文字列は「新しい文字列」であること

replace は、元の文字列を変更せず、新しい文字列を返します。

const s = "aaa";
const t = s.replace(/a/g, "b");

console.log(s); // "aaa"
console.log(t); // "bbb"
JavaScript

文字列は不変(immutable)なので、 replace を呼んでも s の中身は変わりません。

この性質のおかげで、 「元の文字列を残しつつ、表示用だけ修正する」といった使い方がしやすくなります。

まとめ:s.replace(/a/g, 'b') は「パターンに合う部分を全部修正するための基本技」

replace + 正規表現を使いこなせると、 文字列の中の「特定の形をした部分」を一括で修正する処理が、驚くほど短く書けます。

/a/g のように、パターンと g フラグで「どこを全部変えるか」を指定する。 単純な文字列だけでなく、「数字のかたまり」「特定の記号列」なども対象にできる。 元の文字列は変わらないので、安心して「修正版」を作れる。

「この文字列の中の、あるパターンに合うところを全部直したい」と感じた瞬間に、 まず s.replace(/pattern/g, 'new') という形を思い出せるようになること。

それが、正規表現を「検索だけでなく修正にも使う」感覚を身につけるための、大事な一歩になります。

タイトルとURLをコピーしました