実行環境 Node.js 15.2.1

公開日 2020年11月28日 JST

更新日 2021年1月4日 JST

コード例の出力としてconsole.logを使用しています。

使用方法がわからない場合は以下のページを参照してからコード例を確認してください。

console.logの使用方法

こちらはStringオブジェクト(文字列)のindexOfメソッドのページです。
Arrayオブジェクト(配列)のindexOfメソッドは ArrayオブジェクトのindexOfの使用方法 を参照してください。

indexOf(String、文字列)

このページでは豊富な例を用いてJavaScript(js)のindexOf(Stringオブジェクト)の使い方を学ぶことができます。

JavaScript(js)のindexOfはStringオブジェクトのメソッドの1つです。
indexOfは呼び出し元の文字列に対して、第1引数で指定した文字列を検索し、 最初に検索にマッチした文字列の「呼び出し元の文字列中のインデックス」を返り値として返します。
第2引数に数値を指定し、検索を始めるインデックス位置を指定することもできます。

TL;DR

基本

// 文字列はインデックスされている
const string0 = '12345';
console.log(string0[1]);
==> 2



// 文字列中での「検索文字列の最初の文字のインデックス」を返す
const string1 = 'I have a pen.';
const targetIndex1 = string1.indexOf('have');
console.log(targetIndex1);
==> 2



// 単語単位での判定ではない
const string2 = 'I have a pen.';
const targetIndex2 = string2.indexOf('ha');
console.log(targetIndex2);
==> 2



// 検索する文字列が対象の文字列にない場合は-1が返り値
const string3 = 'I have an apple.';
const targetIndex3 = string3.indexOf('pineapple');
console.log(targetIndex3);
==> -1



const string4 = 'I have a pineapple';
const targetIndex4 = string4.indexOf('pineapple');
console.log(targetIndex4);
==> 9
// 一文字でも異なっていたら返り値は-1
const targetIndex5 = string4.indexOf('pineapples');
console.log(targetIndex5);
==> -1



// 最初のpenのインデックスは0、次のpenは20
// indexOfは最初に検索にマッチしたインデックスを得る
const string5 = 'pen,pineapple,apple,pen';
const targetIndex6 = string5.indexOf('pen');
console.log(targetIndex6);
==> 0



// 空文字''はインデックス0
const string6 = 'pen,pineapple,apple,pen';
const targetIndex7 = string6.indexOf('');
console.log(targetIndex7);
==> 0



// indexOfは大文字と小文字を区別します
const string7 = 'I have a pineapple.';
const targetIndex8 = string7.indexOf('i');
console.log(targetIndex8);
==> 10
const targetIndex9 = string7.indexOf('I');
console.log(targetIndex9);
==> 0

検索を始めるインデックス位置の指定

// 第2引数に検索を開始するインデックスを指定できる
const string1 = 'js ts py go js java';
const targetIndex1 = string1.indexOf('js', 1);
console.log(targetIndex1);
==> 12
// 第2引数なしと同じ
const targetIndex2 = string1.indexOf('js', 0);
console.log(targetIndex2);
==> 0



// 範囲外の値の指定
const string2 = '12345 6789';
const targetIndex3 = string2.indexOf('3', -100);
console.log(targetIndex3);
==> 2
const targetIndex4 = string2.indexOf('3', 100);
console.log(targetIndex4);
==> -1



// 空文字の場合
const string3 = 'I love JavaScript.'
const targetIndex5 = string3.indexOf('', 3);
console.log(targetIndex5);
==> 3



// 検索文字列のカウント
const string8 = 'pen,pineapple,apple,pen';
let matches = 0;
let index = string8.indexOf('p');
while (index !== -1) {
  matches++;
  index = string8.indexOf('p', index + 1);
}
console.log(matches);
==> 7

解説

基本

indexOfメソッドは呼び出した文字列(Stringオブジェクト)に対して、第1引数で与えた文字列で検索をかけます。

検索の結果、引数で与えた文字列が見つかればその文字列のインデックスを、見つからなければ-1を返り値として返します。
(文字列はインデックスされており、配列の要素を取り出すように角括弧[]を指定することで値を取得することができます。)

また、indexOfは検索の際に大文字・小文字を区別した検索を行います。

// 文字列はインデックスされている
const string0 = 'abcde';
console.log(string0[2]);
==> c



const string1 = 'abcde';
const targetIndex1 = string1.indexOf('c');
console.log(targetIndex1);
==> 2



// 指定した文字列がない場合
const string2 = 'abcde';
const targetIndex2 = string2.indexOf('g');
console.log(targetIndex2);
==> -1



// 大文字・小文字の区別
const string3 = 'python,javascript,kotlin,golang';
const targetIndex3 = string3.indexOf('JavaScript');
console.log(targetIndex3);
==> -1
const targetIndex4 = string3.indexOf('javascript');
console.log(targetIndex4);
==> 7

検索を始めるインデックス位置の指定

indexOfメソッドは第2引数に数値を指定することで、呼び出し元の文字列のどのインデックスから検索を始めるか決めることができます。

0以下の数値の場合は第2引数を指定しなかったときの挙動と同様で、文字列の長さ以上の値を与えた場合は検索結果なしの-1が返り値です。

const string1 = '12345678901234567890';
const targetIndex1 = string1.indexOf('3', 5);
console.log(targetIndex1);
==> 12

1次情報

String.prototype.indexOf() - MDN web docs