.NET開発者のためのブログメディア
JavaScriptのreplaceを解説します!replaceを使用した文字列の置換方法について簡単に紹介!

- SE
- JavaScriptで文字列の置換を行いたい時に使用するreplaceについて教えてください。
- PM
- 分かりました。それでは、replaceを使用した文字列の置換方法についてご紹介しましょう。
目次
JavaScriptのreplaceとは?
JavaScriptで文字列の中のある単語を、別の単語に置き換えたいことはよくあると思います。そんな時に役立つのがreplaceメソッドです。replaceは最初に指定した文字列を、次に指定した文字列に置換してくれます。以下が簡単な使用例です。
1
2
3
4
5
|
var text1 = '私はリンゴが好きです。';<br>
var text2 = text1.replace('リンゴ', 'ミカン');<br>
alert(text2);<br>
|
JavaScriptの文字列は.replaceで置換処理を呼び出せます。最後のalertは指定された文字列を表示したポップアップウィンドウを出すメソッドです。
実行すると「私はミカンが好きです。」と書かれたポップアップウィンドウが表示されます。text1のリンゴがミカンに置換されていますね。
replaceの落とし穴
では次にこのJavaScriptのサンプルのtext1の内容を少し変えてみましょう。
1
2
3
4
5
|
var text1 = '私はリンゴが好きなのでリンゴを食べます。';<br>
var text2 = text1.replace('リンゴ', 'ミカン');<br>
alert(text2);<br>
|
結果は「私はミカンが好きなのでリンゴを食べます。」になります。1つ目のリンゴしか置換されていません。ここまでの使い方だと、replaceは1つしか置換してくれないのです。
正規表現を使おう
全ての文字列を置換するにはどうしたらよいのでしょうか。それには「正規表現」を使用します。正規表現は文字列を置換するための機能で、JavaScript以外のプログラミング言語でも広く普及しています。
JavaScriptで正規表現を使う場合、/(スラッシュ)で正規表現を囲みます。そしてすべての対象を置換する場合は、「/正規表現/g」のように末尾にgを追加します。
/正規表現/gで全て置換できる
今回のJavaScriptサンプルで正規表現を使う場合は、以下のようにします。
1
2
3
4
5
|
var text1 = '私はリンゴが好きなのでリンゴを食べます。';<br>
var text2 = text1.replace(/リンゴ/g, 'ミカン');<br>
alert(text2);<br>
|
実行すると「私はミカンが好きなのでミカンを食べます。」と表示されます。対象の文字列が全て置換されることがわかりますね。
iを付けると大文字小文字を無視できる
/正規表現/にgだけてなくiも付けると、以下のように大文字と小文字の違いを無視できます。
1
2
3
4
5
|
var text1 = 'Apple Orange Grape';<br>
var text2 = text1.replace(/apple/gi, 'Melon');<br>
alert(text2);<br>
|
実行すると「Melon Orange Grape」と表示されます。appleでAppleを置換できていますね。なおiはignore(無視)の頭文字です。
文字列の位置の入れ替えの例
正規表現は様々なことが出来ます。例えば、
1
2
3
4
5
|
var text1 = '私はリンゴが好きですがミカンは嫌いです。';<br>
var text2 = text1.replace(/(リンゴ)(.*)(ミカン)/, '$3$2$1');<br>
alert(text2);<br>
|
とすると「私はミカンが好きですがリンゴは嫌いです。」と表示されます。(.*)の.は任意の1文字で、*はそれが0文字以上続くという意味です。
(リンゴ)が$1、(.*)が$2、(ミカン)がS3に該当し、リンゴとミカンを逆にすることができています。
$&を使った例
特定の文字列を操作したい場合は、以下のJavaScriptサンプルのように$&を使うと便利です。
1
2
3
4
5
|
var text1 = '私はリンゴが好きですがミカンは嫌いです。';<br>
var text2 = text1.replace(/(リンゴ|ミカン)/g, '$&ジュース');<br>
alert(text2);<br>
|
実行すると「私はリンゴジュースが好きですがミカンジュースは嫌いです。」と表示されます。$&で正規表現でマッチした文字列に追加などができるのです。なお(a|b)は「aまたはb」という意味になります。
$と$\'を使った例
$&と似た機能で、$
と$\’があります。
1
2
3
4
5
6
7
8
9
|
var text1 = 'リンゴミカンバナナ';<br>
var text2 = text1.replace(/ミカン/, '$`');<br>
alert(text2);<br>
var text3 = text1.replace(/ミカン/, '$\'');<br>
alert(text3);<br>
|
実行すると、「リンゴリンゴバナナ」と出た後に、「リンゴバナナバナナ」と表示されます。$`がマッチした文字列の前の文字列、$\’がマッチした文字列の後の文字列を意味します。なお$\’は本来は$’なのですが、シングルクォーテーションは\によるエスケープが必要になります。
数字の桁数指定の例
ネットを利用しているとクレジットカード番号を*で置き換えて表示しているのを見かけます。それをreplaceで行う場合は、以下のJavaScriptサンプルのようにします。
1
2
3
4
5
|
var text1 = '0123 4567 8888';<br>
var text2 = text1.replace(/\d{4}/g, '****');<br>
alert(text2);<br>
|
実行すると「**** **** ****」と表示されます。\dは数字を意味していて、その後の{数字}は、数字が指定した回数繰り返されるとマッチします。なお\dを[0-9]にしても同じ結果になります。
3桁カンマ区切りの例
1,000円のように、金額などの数値で3桁毎にカンマを入れることはよくあります。以下のJavaScriptサンプルでそれを実現できます。
1
2
3
4
5
|
var text1 = '6555444333222111';<br>
var text2 = text1.replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,');<br>
alert(text2);<br>
|
実行すると「6,555,444,333,222,111」と表示されます。a(?=b)は「a’ に ‘b’ が続く場合のみ ‘a’ にマッチする」、a(?!b)は「’a’ に ‘b’ が続かない場合のみ ‘a’ にマッチする」と言う意味です。
つまり(\d)(?=(\d{3})+(?!\d))は「最初に数値があって、その後に3桁の数値が続いて、その後には数値が無い」という条件にマッチするということです。
スペース除去の例
replaceでスペース除去も簡単にできます。以下のJavaScriptサンプルをご覧ください。
1
2
3
4
5
|
var text1 = 'リ ン ゴ ミ カ ン バ ナ ナ';<br>
var text2 = text1.replace(/\s+/g, '');<br>
alert(text2);<br>
|
実行すると「リンゴミカンバナナ」と表示されます。\sが半角・全角のスペースを意味して、+はそれが0回か1回続く、と言う意味になります。
replaceには関数も渡せる
replaceには関数を渡すことができます。以下のJavaScriptサンプルをご覧ください。
1
2
3
4
5
6
7
8
9
|
var text1 = 'apple orange grape';<br>
var text2 = text1.replace(/[a-z]/g, toUpper);<br>
alert(text2);<br>
function toUpper( s ) {<br>
return s.toUpperCase();<br>
}<br>
|
実行すると「APPLE ORANGE GRAPE」と表示されます。replaceの[a-z]で小文字の文字列が抽出されてtoUpper関数に渡され、その中でtoUpperCaseメソッドで大文字に変換されています。
- SE
- JavaScriptのreplaceについてよく分かりました。
- PM
- replaceは正規表現と組み合わせると非常に多くのことが出来るので、是非この記事を読んで理解を深めて下さい。
JavaScriptのreplaceを使いこなそう
JavaScriptのreplaceについて解説しましたが、ご理解頂けましたでしょうか。文字列を置換したい時はよくあるので、使う機会は多くなるでしょう。正規表現の機能についてはこの記事の内容はごく一部なので、是非他の機能も調べてテキスト処理を極めて下さい。
Search キーワード検索
Popular 人気の記事
reccomended おすすめ記事
Categories 連載一覧
Tags タグ一覧
Jobs 新着案件
-
開発エンジニア/東京都品川区/【WEB面談可】/在宅ワーク
月給29万~30万円東京都品川区(大崎駅) -
遠隔テストサービス機能改修/JavaScript/東京都港区/【WEB面談可】/テレワーク
月給45万~60万円東京都港区(六本木駅) -
病院内システムの不具合対応、保守/東京都豊島区/【WEB面談可】/テレワーク
月給30万~30万円東京都豊島区(池袋駅) -
開発/JavaScript/東京都豊島区/【WEB面談可】/テレワーク
月給50万~50万円東京都豊島区(大塚駅) -
債権債務システム追加開発/東京都文京区/【WEB面談可】/在宅勤務
月給62万~67万円東京都文京区(後楽園駅)