JavaScript: substr() とsubstring() の違い、どちらを使うか

NO IMAGE

JavaScriptで、文字列から特定の部分文字列のみを抽出したい場合、substr() と substring() というよく似た名前のメソッドが2つ存在しています。それぞれの違いについて調べたので、メモとして残しておきます。

ちなみに、substr() も、substring() も、substring という英単語に由来していると思われますが、substring は「部分文字列」という意味のようですね。

substr

書式は以下です。

[文字列].substr([開始位置], [長さ])

特徴は、長さを指定できる点です。

開始位置は、一番左の文字から、0, 1, 2 … と割り当てられています。

例えば、’2018-06-01′ という文字列から、月の部分のみを抽出したい場合は、以下のように書くことができます。

var date = '2018-06-01';
var month = date.substr(5, 2); // '06'が抽出される

また、長さは省略可能で、その場合は、開始位置から最後の文字列までが抽出されます。

var date = '2018-06-01';
var month = date.substr(5); // '06-01'が抽出される

substring

書式は以下です。

[文字列].substring([開始位置], [終了位置])

特徴は、終了位置を指定するところです。

例えば、上記と同じく、’2018-06-01′ という文字列から、月の部分のみを抽出したい場合は、以下のように書くことができます。

var date = '2018-06-01';
var month = date.substring(5, 7); // '06'が抽出される

どちらを使えばいいのか

必要に応じて使うしかないのですが、僕の場合、そもそもsubstring() というのを知らず、ずっとsubstr() を使っていました。なので、substr() だけでも十分に対応できるかと思います。

また、substr() は、長さを指定した場合、「何文字切り出されるのかがコードを見てすぐにわかる」というメリットもあります。substring() の場合、何文字切り出されるのかは、[終了位置] – [開始位置] という計算を頭でしなければならないため、若干のコストがあります。

個人的には、名前の似たメソッドを2つも覚えるのは大変なので、substr() のみを使うようにしていこうかと思っています。substr() の方がタイプ数も少ないので。