JavaScriptには特定の文字列が含まれているかを調べるためのメソッドが複数あります。各メソッドには特徴があり、使用する状況に応じて使い分けることが大切です。
この記事では、以下のメソッドの使い方をサンプルコードを用いてわかりやすく解説します。
indexOf()
メソッドincludes()
メソッドsearch()
メソッドtest()
メソッドmatch()
メソッドexec()
メソッド
String.prototype.indexOf()メソッド
indexOf()
メソッドは、指定した文字列が最初に出現する位置(インデックス)を返します。検索対象の文字列が見つからなければ、-1
が返されます。また、大文字と小文字は区別されます。
サンプルコードを以下に示します。
const str = 'abcdefg';
const result = str.indexOf('c');
console.log(result); // 2
大文字と小文字を区別するので、以下の場合は-1
が返されます。
const str = 'ABCDEFG';
const result = str.indexOf('c');
console.log(result); // -1
indexOf()
メソッドは、検索を開始する位置(インデックス)を指定することができます。
const str = 'abcdeabcde';
const result = str.indexOf('c', 3);
console.log(result); // 7
指定しなければ最初の位置で検索され、結果は2
になりますが、検索開始位置を3
に指定すると次に一致する箇所(7
)が返されます。
String.prototype.includes()メソッド
includes()メソッドは、指定した文字列が含まれているかどうかを真偽値(trueまたはfalse)で返します。indexOf()よりシンプルにチェックできるため、特定の文字列が含まれているかどうかを確認する際に便利です。indexOf()
メソッドと同様にincludes()
メソッドも大文字と小文字を区別します。
サンプルコードを以下に示します。
const str = 'abcdefg';
const result = str.includes('c');
console.log(result); // true
大文字と小文字を区別するので、以下の場合はfalse
が返されます。
const str = 'ABCDEFG';
const result = str.includes('c');
console.log(result); // false
includes()
メソッドも、検索を開始する位置(インデックス)を指定することができます。
const str = 'abcdefg';
const result = str.includes('c', 3);
console.log(result); // false
String.prototype.search()メソッド
search()
メソッドは、正規表現を使って指定したパターンに一致する位置を返します。見つからなければ-1
が返されます。
サンプルコードを以下に示します。
const str = 'HELLO world';
const regex = /[a-z]/g;
const result = str.search(regex);
console.log(result); // 6
見つからなければ-1
が返されます。
const str = 'HELLO world';
const regex = /[0-9]/g;
const result = str.search(regex);
console.log(result); // -1
この場合、文字列の中に数字が含まれていないため、-1
が返されます。
RegExp.prototype.test()メソッド
test()
メソッドは、正規表現を使って指定の文字列がマッチするかどうかを判定し、結果を真偽値で返します。
サンプルコードを以下に示します。
const str = 'hello world';
const regex = /[a-z]/g;
const result = regex.test(str);
console.log(result); // true
search()
メソッドとは異なり、位置ではなく真偽値を返すため、マッチの有無を簡単に確認したい場合に便利です。
あわせて読みたい
『test()メソッド』については下記の記事で詳しく説明しています。興味のある方は下記のリンクからぜひチェックをしてみてください。 続きを見る【JavaScript】test()メソッドで文字列が正規表現と一致するかを調べる
String.prototype.match()メソッド
match()
メソッドは、正規表現に一致するすべての部分を配列で返します。マッチしなければnull
が返されます。g
フラグがあるとすべての一致を取得し、なければ最初の一致のみを返します。
サンプルコードを以下に示します。
const str = 'HELLO world';
const regex = /[a-z]/g;
const result = str.match(regex);
console.log(result); // ["w", "o", "r", "l", "d"]
g
フラグがない場合、最初にマッチした部分のみが返されます。
const str = 'HELLO world';
const regex = /[a-z]/;
const result = str.match(regex);
console.log(result); // ["w", index: 6, input: "HELLO world"]
補足
g
フラグがない場合、最初に一致した部分と、最初に一致した部分に関するキャプチャグループを返します。この場合、match()
メソッドの返り値はRegExp.prototype.exec()
と同じ結果になります。
あわせて読みたい
『match()メソッド』については下記の記事で詳しく説明しています。興味のある方は下記のリンクからぜひチェックをしてみてください。 続きを見る【JavaScript】正規表現と一致する部分を抽出する!matchメソッドの使い方!
RegExp.prototype.exec()メソッド
exec()
メソッドも正規表現を使ってマッチを調べ、結果を配列で返します。マッチしなければnull
が返されます。match()
と似ていますが、exec()
は繰り返し呼び出すことで、複数のマッチを順次取得することが可能です。
サンプルコードを以下に示します。
const str = 'HELLO world';
const regex = /[a-z]/;
const result = regex.exec(str);
console.log(result); // ["w", index: 6, input: "HELLO world"]
exec()
はmatch()
と同様に、マッチした結果を配列で返します。繰り返し呼び出すことで、次のマッチを得ることができるため、大量のマッチを順に処理したい場合に便利です。サンプルコードを以下に示します。
const str = 'hello123world456';
const regex = /\d+/g; // 数字の連続にマッチ
let match;
while ((match = regex.exec(str)) !== null) {
console.log(`Found ${match[0]} at index ${match.index}`);
}
// 実行結果
// Found 123 at index 5
// Found 456 at index 13
exec()
メソッドは、正規表現にマッチした部分文字列を配列として返します。ループ内では、マッチするたびに結果がmatch
変数に格納され、その後、match[0]
でマッチした文字列を取得し、match.index
でマッチが開始した位置を取得できます。exec()
がnull
を返すと、すべてのマッチが見つかったことになるため、while
ループが終了します。
本記事のまとめ
この記事では『JavaScriptで特定の文字列が含まれているか調べる方法』について、以下の内容を説明しました。
- 単純に文字列が含まれているか確認したい
includes()
メソッド
- 文字列の位置を知りたい
indexOf()
メソッド
- 正規表現を使ってマッチを確認したい
search()
メソッド,test()
メソッド
- 正規表現を使って詳細なマッチ結果が欲しい
match()
メソッド,exec()
メソッド
上記に示すように、JavaScriptには、文字列内に特定の文字列やパターンが含まれているかどうかを調べる方法が複数存在します。それぞれのメソッドの特性を理解して、適切な場面で使用しましょう。
お読み頂きありがとうございました。