String.prototype.lastIndexOf()

lastIndexOf()String 値のメソッドで、この文字列を検索し、指定した部分文字列が最後に出現するインデックスを返します。オプションで開始位置を取り、指定した数値以下のインデックスにおいて、指定した部分文字列が最後にに出現するインデックスを返します。

試してみましょう

構文

js
lastIndexOf(searchString)
lastIndexOf(searchString, position)

引数

searchString

検索する値を表す文字列です。すべての値は文字列に変換されますので、省略したり undefined を渡したりすると、lastIndexOf()"undefined" という文字列を検索します。これはおそらく望むところではないでしょう。

position 省略可

このメソッドは、position(既定値は +Infinity)以下の位置で、指定した部分文字列が最後に現れるインデックスを返します。position が呼び出された文字列の長さよりも大きい場合、このメソッドは呼び出される文字列全体を検索します。position0 未満の場合、このメソッドは 0 の場合と同じように動作します。すなわち、このメソッドは指定された文字列をインデックス 0 でのみ検索します。

  • 'hello world hello'.lastIndexOf('world', 4)-1 を返します。部分文字列 world が現れるのは 6 のインデックスですが、その位置は 4 以下ではないからです。
  • 'hello world hello'.lastIndexOf('hello', 99)12 を返します。部分文字列 hello が最後に現れる位置が、99 以下である 12 の位置だからです。
  • 'hello world hello'.lastIndexOf('hello', 0)'hello world hello'.lastIndexOf('hello', -5) はどちらも 0 を返します。hello をインデックス 0 でしか検索しないからです。

返値

searchString が最後に出現した位置です。見つからなかった場合は、 -1 になります。

解説

文字列は 0 基点です。文字列の最初の文字のインデックスは 0 で、文字列の最後の文字のインデックスは文字列の長さから 1 を引いたものになります。

js
"canal".lastIndexOf("a"); // 3 を返す
"canal".lastIndexOf("a", 2); // 1 を返す
"canal".lastIndexOf("a", 0); // -1 を返す
"canal".lastIndexOf("x"); // -1 を返す
"canal".lastIndexOf("c", -5); // 0 を返す
"canal".lastIndexOf("c", 0); // 0 を返す
"canal".lastIndexOf(""); // 5 を返す
"canal".lastIndexOf("", 2); // 2 を返す

大文字小文字の区別

lastIndexOf() メソッドは大文字と小文字を区別します。例えば、以下の式は -1 を返します。

js
"Blue Whale, Killer Whale".lastIndexOf("blue"); // -1 を返す

indexOf() と lastIndexOf() の使用

以下の例は、 indexOf()lastIndexOf() を使用して文字列 "Brave, Brave New World" の中の値の位置を示します。

js
const anyString = "Brave, Brave New World";

console.log(anyString.indexOf("Brave")); // 0
console.log(anyString.lastIndexOf("Brave")); // 7

仕様書

Specification
ECMAScript Language Specification
# sec-string.prototype.lastindexof

ブラウザーの互換性

BCD tables only load in the browser

関連情報