JavaScriptのindexOf()メソッドとは
indexOf()メソッドはJavaScriptのString型のメソッドであり、ある文字列中において別の部分文字列を検索し、最初に現れる部分文字列のインデックス番号を返します。
let インデックス番号 = 文字列1.indexOf(文字列2, startIndex]);
indexOf()メソッドは、文字列1に文字列2が含まれない場合は-1を返します。
startIndexは、検索を開始するインデックスを指定するオプションの引数です。デフォルトは0であり、fromIndexを省略した場合は、文字列の先頭から検索を開始します。
また、indexOf()は常に大文字と小文字を区別して検索します。
文字列の中で部分文字列が最後に出現する時のインデックスを取得する場合は、 lastIndexOf()メソッドを使用します。
indexOf()メソッドを使用したコード例
文字列内で部分文字列を検索し、開始位置を取得する
以下は、indexOf()を使って、「I like baseball and basketball.」という文字列の中で、部分文字列「baseball」を検索し、「baseball」が最初に出現する場所のインデックスを取得するコード例です。
let sampleString1 = 'I like baseball and basketball.';
let resultIndex = sampleString1.indexOf('baseball');
console.log(resultIndex); // 7
indexOf()を使用して、文字列内の部分文字列の出現回数を数える
文字列内における部分文字列の出現回数を数える
次の例では、indexOf()メソッドを使用して、文字列’My name is Tanaka, Her name is Sato.’の中の部分文字列’know’の出現回数を数えています。
let sampleString2 = 'My name is Tanaka, Her name is Sato.';
let name = 'name';
let startIndex = sampleString2.indexOf(name);
console.log(startIndex) // 3
let count = 0;
while(startIndex !== -1) {
count++;
startIndex = sampleString2.indexOf(name, startIndex + 1);
}
console.log(count); // 2
コードの解説は以下の通りです。
- まず、indexOf()メソッドでsampleString2の中でnameが最初に出現する箇所を探します。
- 次に、whileループを使ってsampleString2の中で、最後にnameが見つかった位置から+1して、次の位置を繰り返し見つけます(+1するのは検索開始位置をずらすため)
indexOf()と大文字・小文字の区別
indexOf()を使うことで大文字と小文字を区別することもできます。
let sampleString = 'My name is Tanaka';
let smallStr = 'tanaka';
let resultIndex = sampleString.indexOf(smallStr);
console.log(resultIndex); // -1
上記の例は、文字列「’My name is Tanaka’」において大文字の「’Tanaka’」は含みますが、小文字の部分文字列「’tanaka’」を含まないため、indexOf()は-1を返します。
文字列内の部分文字列のインデックスを大文字小文字を区別せずに検索する場合は、以下のように元々の文字列と部分文字列の両方を小文字に変換してからindexOf()メソッドを使用するとよいでしょう。
let sampleString = 'My name is Tanaka';
let smallStr = 'tanaka';
let resultIndex = sampleString.toLocaleLowerCase().indexOf(smallStr.toLocaleLowerCase());
console.log(resultIndex); // 0
上記のコードでは、sampleStringとsmallStrのどちらもtoLocaleLowerCase()メソッドを使用して、小文字に直しています。
JavaScriptのindexOf()メソッドまとめ
- indexOf() は、文字列中の部分文字列を検索し、部分文字列が最初に出現するインデックスを返す
- もし、文字列中に部分文字列がない場合は -1 を返す
- indexOf()メソッドの第2引数は検索開始位置を示す
- indexOf() は、大文字と小文字を区別して検索する