【JavaScript】

substring(), slice(), substr()の違い

文字列を切り出す(分割)するメソッドの違い

投稿日 2021/10/14 更新日 2021/10/14


こんにちは。当サイトの管理者「元木皇天」です。

今回はJavaScriptで文字列を切り出す(分割)する時に用いられる3つのメソッド、substring(), slice(), substr()の違いについて解説いたします。

環境
OS:MacOS Big Sur
GoogleChrom:バージョン94.0.4606.54

違い1. 処理内容の違い

まずは各メソッドの処理内容の微妙な違いについてです。

どれも文字列を切り出し(分割)して新たな文字列を生成することに変わりはないのですが、微妙に切り出すルールが異なります。

substring(), slice()の場合
第一引数:文字列を切り出す開始位置
第二引数:文字列を切り出す終了位置

substr()の場合
第一引数:文字列を切り出す開始位置
第二引数:切り出す文字数

見ていただいた通り、第二引数の意味がsubstr()のみ異なります。

文字列のどこからどこまでを切り出す
という処理と
文字列のどこから何文字切り出す
という違いがあるので、使用する際は間違えないようにしましょう。

実際に使用した例を以下に載せておきますのでご参考までに。

substring(),slice(),substr()の実行1

違い2. 引数が負数の時の違い

次にそれぞれのメソッドの引数に、負数(0未満の数)が渡された時の処理の違いについてです。

負数を引数に渡した場合、以下のような違いがあります。

substring()
引数に負数が与えられた場合は、0として扱う

slice()
引数に負数が与えられた場合は、文字列の後ろから数えた位置として扱う
(例:-2の場合は文字列の最後から2文字目の位置を指す)

substr()
第一引数:引数に負数が与えられた場合は、文字列の後ろから数えた位置として扱う
第二引数:引数に負数が与えられた場合は、0として扱う

実際に使用した結果は以下の通りです。

slice()とsubstr()は文字列の後ろからの位置を指定できると覚えておきましょう。

substring(),slice(),substr()の実行2

違い3. 第一引数 > 第二引数の時の違い

第一引数と第二引数を比較した時に、第一引数のほうが大きい場合にも違いがあります。(substr()は今回の比較からは除く)

substring()
第一引数 > 第二引数の場合、第一引数と第二引数を入れ替えて処理を行う。。

slice()
第一引数 > 第二引数の場合、そのまま処理を行う。

第一引数 > 第二引数で使用する場面はあまり思い浮かびませんが、このような仕様があるということを覚えておくと、思わぬ動作に驚かなくて済むかもしれません。


実際に使用した結果は以下の通りです。

substring(),slice(),substr()の実行3

まとめ

・substr()の第二引数は切り出す位置ではなく切り出す文字数。
・slice(), substr()(第一引数のみ)の引数に負数を与えた場合、文字列の後ろからの位置として扱う。
・substring()の引数が"第一引数 > 第二引数"の場合、第一引数・第二引数を入れ替えて処理を行う。

参考文献・おすすめ文献