tc39_study: String.prototype.replaceAll
注意事項
- これは#tc39_studyの発表資料です
- この機能はまだ提案/策定途中であり仕様に入るまでに大きな変更が入る可能性があり、またこの機能の策定自体が中止される可能性もあります。
ステータス
- proposal
- Champion
- Stage: 3 (2 to 3 per 2019.10.02 TC39)
- 実装済みのエンジン: なし
モチベーション
文字列の中の特定の文字をすべて置換したい
e.g. q=query+string+parameters
-> q=query string parameters
StackOverflow で 4000 近くの vote、700 以上の star がついている
現状の解決策 1
const queryString = "q=query+string+parameters";
const withSpaces = queryString.replace(/\+/g, " ");
RegExp で意味を持つ記号はエスケープが必要
現状の解決策 2
const queryString = "q=query+string+parameters";
const withSpaces = queryString.split("+").join(" ");
一度 Array に変換してから String に戻すのでオーバーヘッドが大きい
String.prototype.replaceAll
const queryString = "q=query+string+parameters";
const withSpaces = queryString.replaceAll("+", " ");
空文字を置換したらどうなる?
"x".replace("", "_");
// -> '_x'
"xxx".replace(/(?:)/g, "_");
// -> '_x_x_x_'
"xxx".replaceAll("", "_");
// -> '_x_x_x_'
結果としては replace(/(?:)/g, replaceValue)
と同じになる