まくまくJavaScriptノート
文字列を置換する
2012-01-20

replace の基本

String#replace() メソッドを使用すると、String オブジェクト内のパターンに一致する文字列を置換することができます。 下記の例では、ABC という文字列を XXX に置換しています。

var text = 'ABC 123 ABC 123';
var s = text.replace('ABC', 'XXX');  //=> 'XXX 123 ABC 123'

replace メソッドは、自分自身のオブジェクトの内容を変更しないため、置換結果は戻り値として受け取らなければいけないことに注意してください。 また、デフォルトでは上記のように、最初に見つかった文字列しか置換されません。 パターンが複数箇所に一致した場合に、すべて置換するには、次に示すように正規表現パターンを使用する必要があります。

正規表現パターンに一致する文字列を全て置換する

パターンに一致した部分すべてを一括置換したい場合は、正規表現属性の g(グローバル検索)を付けて replace() を実行します。

例: すべての ABC を XXX に置換

var text = 'ABC 123 ABC 123';
var s = text.replace(/ABC/g, 'XXX');  //=> 'XXX 123 XXX 123'

正規表現属性は複数組み合わせて使用することができるので、次のように、大文字と小文字を区別せずに検索して置換することもできます。

例: 大文字と小文字が混在するものを「JavaScript」という表現に統一

var s = text.replace(/javascript/gi, 'JavaScript');

正規表現パターンに一致した部分を置換後の文字列で使用する

正規表現を使用した置換が強力なのは、パターンに一致した実際の文字列を、置換後の文字列の中で参照することができることです。 正規表現パターンにマッチした部分全体は、$& で参照することができます($0 ではないことに注意)。

例: 数値を [ と ] で囲む

var re = /\d+/g;
var text = 'ABC 123 DEF 456';
var s = text.replace(re, '[$&]');  //=> 'ABC [123] DEF [456]'

正規表現の中のパターンを () でグルーピングしておくと、その中で実際に一致した部分を $1$2$3 というキーワードを使って参照することができます(Perl と同様の記法です)。

例: 姓と名を入れ替える

var re = /(\w+)\s(\w+)/;
var text = 'John Smith';
var s = text.replace(re, '$2, $1');  //=> 'Smith, John'
2012-01-20