文字列の置換は、文字列の検索と合わせてプログラムでは必須の操作である。 置換には単純な置換と動的な置換がある。動的な置換は、正規表現などの検索の結果によって、 操作を変更できるものをいう。
なお、以前は正規表現による検索も合わせて説明していたが、 その内容の一部は「正規表現とパターンマッチング」 に移し、一部は削除した。
単純な文字列の置換には、substring
や slice
がある。
どちらも s で始まる関数でこんがらがるので、整理する。
以下、エスペラントの単語 malsanulo (病人)をもとに、説明していく。 この言葉は、sana (健康な) (語幹 san と形容詞を表す語尾 a の組み合わせ)から派生したことばで、 反対を意味する mal が接頭辞となって malsana で「病気の」という意味になる。 さらに、人を表す接尾辞 ul を末尾に、もう一つおまけに名詞を表す o を末尾につけて、 malsanulo ができあがる。これは病人を表す。
substring(m)
または、substring(m, n)
とする。
引数 m, n はどちらも整数である。
引数が 1 つ、すなわち m のみの場合、m
が負でない整数であれば先頭の数字から数えて(先頭は 0 で数える)
m 番目から末尾までの文字列を返す。m が 負の整数であれば、m = 0 とみなされる。
引数が 2 つの場合は、先頭から m 番目から 先頭から n - 1 個めまでの文字をとる。
"malsanulo".substring(0) // => malsanulo
"malsanulo".substring(3) // => sanulo
(反対を表す mal が取れたので、sanulo は「健康な人」を表す)。"malsanulo".substring(-3) // => malsanulo
"malsanulo".substring(3, 6) // => san
( san は「健康な」という形容詞 sana の語幹)。
slice(m)
または slice(m, n)
である。
引数 m, n はどちらも整数である。
引数が 1 つ、すなわち m のみの場合、その引数 m が負でない整数であれば先頭頭の数字から数えて(先頭は 0)
m 番目から末尾までの文字列を返す。m が負の整数であれば、後ろから数える。-1 ならば末尾の数字から、-2 なら
末尾から 2 番目の数字から数える。
引数が 2 つの場合は、先頭から m 番目から 先頭から n 番目 の文字をとる。n に関しても負の数を許す。
数え方は m と同様。
"malsanulo".slice(0) // => malsanulo
"malsanulo".slice(3) // => sanulo (この場合は、メソッド substring(3) と同じ)。
"malsanulo".slice(-3) // => ulo (この場合は、メソッド substring(-3) と異なり、後ろから数えて3文字分を取る。 ulo は「人」)。
"malsanulo".slice(-3, -1) // => ul(後ろから数えて 3 文字分から後ろから数えて 1 文字を落とす。ul は人を意味する接尾辞)。
なお、以前は substr
メソッドの説明もしていたが、これは非推奨となったので削除した(2020-03-25)。
正規表現を用いて動的な置換をすることができる。
JavaScript の正規表現を使った置換は replace メソッドである。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/replace
このとき、RegExp.$1などの後方参照を使うときのコツがある。 その場で後方参照を使うときには、無名関数を使うのである。
let str = "kondowa634toyariaunode8940niwa4649tsutaetekure"
let str1 = str.replace(/(\d+)/g, function(){return ` ( ${RegExp.$1} ) `}) // => kondowa (634) toyariaunode (8940) niwa (4649) tsutaetekure
なお、replace
は静的な置換も可能である。
まりんきょ学問所 > JavaScript 手習い > 文字列の置換