JavaScript

最終更新日:
公開日:

レシピ

正規表現

正規表現で文字列に含まれる特定の文字を置き換える

正規表現で文字列から特定の文字を検索し、該当する文字を指定する文字に置き換える方法を解説します。

この記事のポイント

  • replaceメソッドは第2パラメータに置き換え処理を指定することができる
  • 置き換える文字列を空文字にすると削除機能になる

目次

文字列の中から正規表現のパターンにマッチする文字を置き換える

replaceメソッドは文字列から正規表現のパターンを検索し、マッチした文字列を第2パラメータで指定した文字列に置き換えることができます。

次の例では変数textに入っている文字列から「cat」を検索し、マッチすると「dog」に置き換えます。

JS コード例

let text = 'I like cat. Cat is so cute. Black cat, White cat, Brown cat.';
let search_word = 'cat';

// 正規表現のパターンを作成
let regexp = new RegExp( search_word, 'gi');

let result = text.replace( regexp, 'dog');
console.log(result);
// I like dog. dog is so cute. Black dog, White dog, Brown dog.

検索するワードを変数search_wordに入れて、正規表現のパターンを作成します。
第2パラメータに全件検索を行うgフラグと、大文字/小文字を区別しないiフラグを指定し、変数textにマッチする全ての「cat」を置き換えるようにしています。

作成した正規表現はreplaceメソッドに渡し、マッチしたら第2パラメータで指定している「dog」に置き換えを実行します。
置き換えた後の文字列が戻り値となります。
なお、置き換えを実行しても元の文字列には影響しません。

文字列の置き換え処理を指定する

replaceメソッドの第2パラメータは置き換える文字を指定するだけでなく、置き換える処理を指定することもできます。

次の例では独自の置き換え処理を使って、変数textの文字列に含まれる「cat」の様々な大文字/小文字の記述に対応した置き換えを行います。

JS コード例

let text = 'I like cat. Cat is so cute. Black cAT, White cAt, Brown CAT.';
let search_word = 'cat';
let regexp = new RegExp( search_word, 'gi');

let result = text.replace( regexp, function(match){

  let res = 'dog';

  switch(match) {
    case 'Cat':
      res = 'Dog';
      break;

    case 'cAt':
      res = 'dOg';
      break;

    case 'caT':
      res = 'doG';
      break;

    case 'CaT':
      res = 'DoG';
      break;

    case 'cAT':
      res = 'dOG';
      break;

    case 'CAT':
      res = 'DOG';
      break;
  }

  return res;
});

console.log(result);
// I like dog. Dog is so cute. Black dOG, White dOg, Brown DOG.

先述した置き換えは「cat」も「CAT」も一律で小文字の「dog」に置き換えましたが、今回はreplaceメソッドの第2パラメータに無名関数を指定して置き換え処理を用意しています。
最終的に置き換えた文字列はreturnで戻り値として返す必要があります。

関数の引数になっている変数matchにはマッチした文字列が入ります。
その値をswitch文で確認し、大文字と小文字の組み合わせに合わせて置き換える文字を判別します。

指定する関数は今回のように無名関数のみでなく、別の場所で定義したメソッドを呼び出すことも可能です。
次の例では置き換えにreplaceDogメソッドを呼び出しています。

JS コード例

let text = 'I like cat. Cat is so cute. Black cAT, White cAt, Brown CAT.';
let search_word = 'cat';
let regexp = new RegExp( search_word, 'gi');

let result = text.replace( regexp, replaceDog);

console.log(result);
// I like dog. Dog is so cute. Black dOG, White dOg, Brown DOG.

呼び出したメソッドには、先頭から順にマッチした文字列、文字の開始位置、検索元のテキストが引数として渡されます。

JS コード例

function replaceDog(match, index, text) {
	console.log(match); // cat
	console.log(index); // 7
	console.log(text); // I like cat. Cat is so cute. Black cAT, White cAt, Brown CAT.
}

もしキャプチャリング括弧によって保持している値がある場合は、マッチした文字列の後ろに保持している値の数だけ引数が続きます。
これの引数を活用することで、文字列の置き換え処理をカスタマイズできるようになっています。
活用例は別記事「文字列を置き換えてハイライト表示する」を参照ください。

検索したワードを削除する

replaceメソッドの文字の置き換え機能を利用して、第2パラメータに空文字を指定するとマッチした文字列を削除する機能として使用することができます。

次の例では、変数textの文字列にある「cat」を全て削除します。

JS コード例

let text = '世界から猫が消えたなら';
let search_word = '猫';

// 正規表現のパターンを作成
let regexp = new RegExp( search_word);

let result = text.replace( regexp, '');
console.log(result);
// 世界からが消えたなら

基本的な流れは先述した「cat」と「dog」を置き換えるものと同じですが、replaceメソッドの第2パラメータに空文字「'''を2つ)」を指定しているところがポイントです。
この置き換えを実行すると、最後に出力したように文字列から「」が消えます。(置き換えた後の日本語がおかしくなってしまいますが…)