JavaScript/String/prototype/lastIndexOf
String.prototype.lastIndexOf()
メソッドは、文字列内で指定された部分文字列が最後に現れる位置のインデックスを返します。指定された位置から逆方向に検索し、見つからない場合は -1 を返します[1]。
構文
[編集]str.lastIndexOf(searchString[,position])
searchString
: 検索する部分文字列。position
(省略可能): 検索を開始する位置を表す数値。デフォルト値は +∞ で、文字列の末尾から検索を開始します。
例
[編集]文字列内の部分文字列を逆方向に検索するプログラム
[編集]以下のプログラムは、String.prototype.lastIndexOf()
を使用して文字列内の部分文字列を逆方向に検索します。
conststr='Hello World, Hello JavaScript';console.log(str.lastIndexOf('Hello'));// 13(最後に現れる 'Hello' の位置)console.log(str.lastIndexOf('World'));// 6console.log(str.lastIndexOf('hello'));// -1(大文字・小文字は区別されます)
このプログラムでは、String.prototype.lastIndexOf()
を使用して文字列 str
内の部分文字列を逆方向に検索しています。'Hello'
の最後の出現は位置 13 で見つかり、'World'
は位置 6 で見つかり、'hello'
(小文字)は見つからないため -1 が返されます。
開始位置を指定して検索するプログラム
[編集]以下のプログラムは、String.prototype.lastIndexOf()
を使用して指定された位置から逆方向に検索を開始します。
conststr='Hello World, Hello JavaScript';console.log(str.lastIndexOf('Hello'));// 13(デフォルトでは文字列全体を検索)console.log(str.lastIndexOf('Hello',12));// 0(位置 12 から逆方向に検索)console.log(str.lastIndexOf('o'));// 19(最後の 'o' の位置)console.log(str.lastIndexOf('o',10));// 7(位置 10 から逆方向に検索した場合の 'o' の位置)
このプログラムでは、String.prototype.lastIndexOf()
を使用して文字列 str
内の部分文字列を指定位置から逆方向に検索しています。'Hello'
の検索では、位置 12 を指定すると最初の 'Hello'
が見つかります。'o'
の検索では、位置 10 を指定すると位置 7 の 'o'
が見つかります。
文字列内のすべての出現位置を逆順に検索するプログラム
[編集]以下のプログラムは、String.prototype.lastIndexOf()
を使用して文字列内のすべての部分文字列の出現位置を逆順に検索します。
conststr='Hello World, Hello JavaScript, Hello Node.js';constsearchStr='Hello';constpositions=[];letpos=str.length;while((pos=str.lastIndexOf(searchStr,pos-1))!==-1){positions.push(pos);}console.log(positions);// [32, 13, 0](逆順に検出された位置)
このプログラムでは、String.prototype.lastIndexOf()
を繰り返し使用して文字列 str
内のすべての 'Hello'
の出現位置を逆順に検索しています。結果として、位置 32、13、0 の順で見つかります。
indexOf と lastIndexOf を比較するプログラム
[編集]以下のプログラムは、String.prototype.indexOf()
と String.prototype.lastIndexOf()
の違いを比較します。
conststr='JavaScript is amazing, JavaScript is fun';constsearchStr='JavaScript';// indexOf は前方から検索constfirstPos=str.indexOf(searchStr);console.log(firstPos);// 0(最初の出現位置)// lastIndexOf は後方から検索constlastPos=str.lastIndexOf(searchStr);console.log(lastPos);// 25(最後の出現位置)// 両方のメソッドで位置を指定console.log(str.indexOf(searchStr,10));// 25(位置 10 から前方検索)console.log(str.lastIndexOf(searchStr,20));// 0(位置 20 から後方検索)
このプログラムでは、String.prototype.indexOf()
と String.prototype.lastIndexOf()
の動作の違いを示しています。indexOf()
は文字列の先頭から検索を開始し、lastIndexOf()
は文字列の末尾から検索を開始します。また、位置パラメータを指定した場合の動作の違いも示しています。
注意点
[編集]- 大文字・小文字の区別:
lastIndexOf()
メソッドは大文字と小文字を区別します。 - -1 の戻り値: 検索文字列が見つからない場合は -1 を返します。
- 位置パラメータ: 位置パラメータが文字列の長さよりも大きい場合は、文字列の長さが使用されます。負の値を指定した場合は 0 が使用されます。
- 空文字列: 検索文字列が空文字列の場合、位置パラメータが文字列の長さよりも大きい場合は文字列の長さを返し、それ以外の場合は位置パラメータを返します。
- Unicode: このメソッドは UTF-16 コードユニットの値に基づいて動作します。
- indexOf との違い:
indexOf()
は前方から検索を行い、lastIndexOf()
は後方から検索を行います。
脚註
[編集]- ^このメソッドは、文字列内の部分文字列を後方から検索するために使用されます。