tc39_study: String.prototype.replaceAll

注意事項

  • これは#tc39_studyの発表資料です
  • この機能はまだ提案/策定途中であり仕様に入るまでに大きな変更が入る可能性があり、またこの機能の策定自体が中止される可能性もあります。

ステータス


モチベーション

文字列の中の特定の文字をすべて置換したい 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)と同じになる

変更履歴

360d0cfd Add icon variations