JavaScript で文字列に部分文字列が含まれているかどうかを確認する

Harshit Jindal 2023年10月12日
  1. JavaScript で正規表現を使用して文字列に部分文字列が含まれているかどうかを確認する
  2. JavaScript で String.includes() を使用して文字列に部分文字列が含まれているかどうかを確認する
  3. JavaScript で String.indexOf() を使用して文字列に部分文字列が含まれているかどうかを確認する
JavaScript で文字列に部分文字列が含まれているかどうかを確認する

このチュートリアルでは、JavaScript で文字列に部分文字列が含まれているかどうかを確認する方法を説明します。

これは単純で一般的なタスクですが、言語が異なれば処理方法も異なります。上記の目標を達成するために、JavaScript に組み込まれているメソッドとカスタム作成されたメソッドを確認します。

JavaScript で正規表現を使用して文字列に部分文字列が含まれているかどうかを確認する

これは、部分文字列の存在を確認するための最も強力で従来の方法の 1つです。JavaScript の組み込みメソッドでは、定数文字列しかチェックできず、動作の大文字と小文字を区別できないため、組み込みメソッドと比較して多くの柔軟性が得られます。RegExp.test() メソッドを使用して、文字列内の部分文字列をチェックします。

let str = 'delftstack';
console.log(/stack/.test(str));

出力:

true

ここでは、.test() 関数を使用して、サブストリング stack がストリング delftstack 内に存在するかどうかを確認し、結果として true を取得します。

しかし、正規表現の優れている点は、組み込みの JavaScript メソッドでは不可能な、大文字と小文字を区別しない検索を実行できることです。また、固定長の数値部分文字列のようなパターンを、それが何であるかを知らなくても検索できます。

let str = 'delftstack';
console.log(stack / i.test(str));

出力:

true

/stack/i を追加すると、大文字と小文字を区別しない検索を実行できます。

JavaScript で String.includes() を使用して文字列に部分文字列が含まれているかどうかを確認する

ES6 では、特定のサブストリングがストリング内に存在するかどうかを確認するのに役立つ .includes() 関数が導入されました。存在を true または false で示すブール値を返します。これは大文字と小文字を区別するメソッドであるため、部分文字列 Ss と一致すると、false が返されます。

このメソッドは 2つの引数を取ります。1つ目はサブストリングで、2つ目はストリング内の検索を開始するインデックスです。2 番目の引数が左の境界から外れている場合、つまり 0 未満の場合、JavaScript はインデックス 0 から検索を開始します。文字列の長さより大きい場合は、直接 false を返します。

const str = 'delftstack';
const substr = 'stack';
console.log(str.includes(substr));

出力:

true

上記のコードでは、部分文字列を関数に渡し、文字列 delftstack 内に stack が存在するため、true を返します。

const str = 'delftstack';
const substr = 'stack';
console.log(str.includes(substr, 4));

出力:

true

このコードは、5 番目のインデックスから stack という単語の検索を開始します。

JavaScript で String.indexOf() を使用して文字列に部分文字列が含まれているかどうかを確認する

ES6 が String.includes() メソッドを導入する前は、組み込みメソッドは .indexOf() のみでした。これは、String.includes() メソッドと非常によく似ています。このメソッドは、ブール値を返す代わりに、指定された文字列内に部分文字列が存在する場合は部分文字列の最初の文字のインデックスを返し、部分文字列が存在しない場合は -1 を返します。

const str = 'delftstack';
const substr = 'stack';
console.log(str.indexOf(substr) != -1);

出力:

true

古いかもしれませんが、関数の結果にチェックを追加して -1 と等しくないかどうかを確認するだけで、.includes() のように使用できるため、より正確です。.includes() とは異なり、部分文字列の先頭の正確なインデックスが返され、より実用的に重要になる可能性があります。

String.includes() を除く上記のすべてのメソッドは、すべての主要なブラウザでサポートされています。String.includes() は ES6 によって導入されましたが、Internet Explorer ではまだサポートされていません。これを行うもう 1つの方法は、KMP(Knuth-Morris-Pratt)アルゴリズムを使用することです。これは、広範なアプリケーションで O(n) アルゴリズムです。それ自体が大きなトピックであり、今後の記事で取り上げます。

著者: Harshit Jindal
Harshit Jindal avatar Harshit Jindal avatar

Harshit Jindal has done his Bachelors in Computer Science Engineering(2021) from DTU. He has always been a problem solver and now turned that into his profession. Currently working at M365 Cloud Security team(Torus) on Cloud Security Services and Datacenter Buildout Automation.

LinkedIn

関連記事 - JavaScript String