JavaScript

最終更新日:
公開日:

レシピ

文字列

文字列の中に特定のワードが含まれているか検索する

文字列の中に特定のワードが含まれているか確認したり、ワードが見つかった位置を取得する方法について解説します。

この記事のポイント

  • 検索ワードが含まれるかだけ調べたいときはincludesメソッドを使う
  • 検索ワードの開始位置を調べるときはindexOfメソッドを使う
  • メソッドの検索開始位置を指定することで全件検索を実装できる

目次

文字列を検索するメソッド

ある文字列の中に検索したいワードが含まれているかを確認したいとき、含まれているか確認したり、含まれているときに何文字目に見つかったかを返すメソッドが用意されています。

Note

こちらの記事では文字列の検索で正規表現は使いません。正規表現を使った文字列の検索については「正規表現で文字列から特定の文字を検索する」を参照してください。

メソッド名内容戻り値
includesメソッド検索したいワードが含まれているか確認するtruefalse
startsWithメソッド文字列が指定したワードで始まっているか確認するtruefalse
endsWithメソッド文字列が指定したワードが終了しているか確認するtruefalse
indexOfメソッド指定したワードが最初に登場する位置を調べる検索ワードの開始位置、-1(見つからない)
lastIndexOfメソッド指定したワードが最後に登場する位置を調べる検索ワードの開始位置、-1(見つからない)

上の3つのメソッドはBooleantruefalseを返します。
下の2つのメソッドは登場する先頭文字の位置をNumberで返し、もし登場しない場合は-1を返します。

以降はそれぞれのメソッドの使い方と挙動を解説していきます。

指定したワードが含まれているか確認する

シンプルにある文字列の中に特定のワードが含まれているか否かを確認したいときはincludesメソッドを使用します。
以下の例は文字列を変数testに用意し、検索するワードをword1word4の4つ用意してメソッドで検索を行います。

JS コード例

let test = '文字検索をテストするためのテキストです。いくつかのメソッドをテストします。なお、このテストは正規表現を使用しません。';
let word1 = 'テスト';
let word2 = '文字検索';
let word3 = '使用しません。';
let word4 = 'Test';

console.log( test.includes(word1)); // true
console.log( test.includes(word2)); // true
console.log( test.includes(word3)); // true
console.log( test.includes(word4)); // false

includesメソッドは検索する文字列を先頭に置き、第1パラメータに検索するワードを指定します。
上記の例では検索する文字列がtest、ワードがword1word4になります。

word1word3までは文字列に含まれているのでtrueword4のみ見つからないためfalseが出力されます。
ちなみに、includesメソッドはアルファベットの大文字、小文字も分けて検索を行います。

includesメソッドは第2パラメータに整数で検索開始する位置を指定することができます。
以下の例は上記のコードに、10文字目から検索開始する指定を加えています。

JS コード例

let test = '文字検索をテストするためのテキストです。いくつかのメソッドをテストします。なお、このテストは正規表現を使用しません。';

let word1 = 'テスト';
let word2 = '文字検索';
let word3 = '使用しません。';

console.log( test.includes(word1, 9)); // true
console.log( test.includes(word2, 9)); // false
console.log( test.includes(word3, 9)); // true

10文字目から検索開始するためword2のワードが登場しなくなりfalseとなりました。
文字列の「○文字目」の指定は配列と同様で、先頭の1文字目を0から開始するため、10文字目から検索開始するときは9を指定しています。

includesメソッドの姉妹メソッドとして、指定したワードで始まるかを調べるstartsWithメソッドと、指定したワードで終わるかを調べるendsWithメソッドがあります。
使い方はincludesメソッドと同じですが、検索する位置が限定的である点がポイントです。

JS コード例

let test = '文字検索をテストするためのテキストです。いくつかのメソッドをテストします。なお、このテストは正規表現を使用しません。';

let word1 = 'テスト';
let word2 = '文字検索';
let word3 = '使用しません。';
let word4 = 'Test';

console.log( test.startsWith(word1)); // false
console.log( test.startsWith(word2)); // true

console.log( test.endsWith(word1)); // false
console.log( test.endsWith(word3)); // true

testの文字列は「文字検索」で始まっているため、test.startsWith(word2)trueと出力されます。
同じように、文字列は「使用しません。」で終わっているためtest.endsWith(word3)trueになりました。

この2つのメソッドも第2パラメータに検索開始位置を指定することができます。

JS コード例

let test = '文字検索をテストするためのテキストです。いくつかのメソッドをテストします。なお、このテストは正規表現を使用しません。';

let word1 = 'テスト';
let word2 = '文字検索';
let word3 = '使用しません。';
let word4 = 'Test';

console.log( test.startsWith(word1, 5)); // true
console.log( test.startsWith(word2, 5)); // false

console.log( test.endsWith(word1, 8)); // true
console.log( test.endsWith(word3, 8)); // false

上の例ではstartsWithメソッドを5文字目から開始しているため、検索する文字列は「テストするための〜」で開始しています。
そのため、word1のワードで始まっているのでtrueと出力されました。

endsWithメソッドは8文字目から開始しているため、検索する文字列は「するためのテキストです。〜」で開始しています。
一見、開始位置に関係なく終わりは「〜を使用しません。」に見えますが、実は開始位置を指定すると検索する文字列を1周する仕様になっているため、文字列の終わりは「〜を使用しません。文字検索をテスト」になります。
その結果、word1の「テスト」で終わっているためtrueが出力されます。

指定したワードの開始位置を取得する

文字列の中に特定のワードが含まれているとき、何文字目に登場するかを確認したいときはindexOfメソッドを使用します。
このメソッドは1つ目に見つかった開始位置のみ返しますが、ワードが複数見つかる場合に最後に登場する開始位置を取得したいときは姉妹メソッドであるlastIndexOfメソッドを使うことができます。

JS コード例

let test = '文字検索をテストするためのテキストです。いくつかのメソッドをテストします。なお、このテストは正規表現を使用しません。';
let word1 = 'テスト';

console.log( test.indexOf(word1)); // 5
console.log( test.lastIndexOf(word1)); // 42

この例では「テスト」を検索していますが、indexOfメソッドは1つ目にヒットするため開始位置5を返します。
lastIndexOfメソッドの方は最後に登場する開始位置を返すため42を返します。

ワードを全件検索する

indexOfメソッドはワードが1つヒットすると終了してしまいますが、第2パラメータの開始位置の指定と併せることで全件検索を実装することができます。

JS コード例

let test = '文字検索をテストするためのテキストです。いくつかのメソッドをテストします。なお、このテストは正規表現を使用しません。';
let word1 = 'テスト';
var index = -1;

while( 0 <= (index = test.indexOf(word1, index)) ) {
  console.log(index);
  index++;
}
// 出力: 5, 30, 42

この例では変数indexはポイントとなり、ワードが1つヒットしたら開始位置をindexに保存してメソッドの第2パラメータに指定し、次のワード検索を開始します。
この仕組みで毎回開始位置をずらしながら検索を実行していき、ワードが登場しなくなるまで繰り返します。
最終的に検索にヒットしなくなると「-1」が返ってくるので、条件式が「0 <= -1」でfalseとなって検索を終了します。

こちらの記事は役に立ちましたか?

ありがとうございます。
もしよろしければ、あわせてフィードバックや要望などをご入力ください。

コメントありがとうございます!
運営の参考にさせていただきます。