search
LoginSignup
44

More than 3 years have passed since last update.

posted at

updated at

javascriptのStringのsubstring slice substr

Stringオブジェクトのsubstringとsliceとsubstrはどれも文字列から指定した範囲で文字を切り出すメソッドだが、微妙な違いがある。

文字列の5文字目から7文字目を抜き出す。

substring

var str = 'hogeほげーfugaふがー'
str.substring(4, 7)
//ほげー

slice

var str = 'hogeほげーfugaふがー'
str.slice(4, 7)
//ほげー

substr

var str = 'hogeほげーfugaふがー'
str.substr(4, 3)
//ほげー

substringとsliceは、

str.substring[slice](start, end)

と書く。(startはn + 1であることに注意)

substrは

str.substr(start, startから何文字切り取るか)

と書く。

こう見ると一見、substringとslice一緒やんーとなるかもしれない。しかし、この二つにも微妙な違いが存在する。

start(第一引数) > end(第二引数) の時

第一引数の値が第二引数よりも大きくなった場合に違いがある。

substring

var str = 'hogeほげーfugaふがー'
str.substring(7, 4)
//ほげー

slice

var str = 'hogeほげーfugaふがー'
str.slice(7, 4)
//""

substringでは、start(第一引数) と end(第二引数)をひっくり返して処理する。
sliceでは、空文字を返す。

end(第二引数)に負の値

end(第二引数)に負の値が入ったときの挙動も違う。

substring

var str = 'hogeほげーfugaふがー'
str.substring(4, -7)
//hoge

slice

var str = 'hogeほげーfugaふがー'
str.slice(4, -7)
//ほげー

substringでは、負の値は0にキャストされる。
そして先ほどの例で示したように、substringは、start(第一引数) > end(第二引数)だった場合にはひっくり返して処理するので、0から4文字目までを返す。

sliceでは、負の値はキャストされず、末尾から数える。
つまり、slice(4, -7)は、slice(4, 7)と同じになる。
slice(4, -4)ならば、slice(4, 10)と同じ。
(文字列の長さから引いた数と考えるとわかりやすいかも)

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
44