【JavaScript】ある文字列が別の文字列内に出現する回数をカウントする方法
この記事では、2つの文字列を受け取り、一方の文字列(部分文字列)がもう一方の文字列(対象文字列)の中に何回出現するかを数えて返す、JavaScript関数の作り方を解説します。
前提となる文字列の準備
まず、検索対象となる文字列を用意します。
const main = 'This is the is main is string';
この「main」の中に、次の文字列が何回登場するかを調べます。
const sub = 'is';
正規表現とreplace()を使った実装例
グローバルフラグ(g)を付けた正規表現オブジェクトを作成し、replace() のコールバック関数が呼ばれるたびにカウントを1つずつ増やしていくのが定番のアプローチです。
const main = 'This is the is main is string';
const sub = 'is';
const countAppearances = (main, sub) => {
const regex = new RegExp(sub, "g");
let count = 0;
main.replace(regex, () => {
count++;
});
return count;
};
console.log(countAppearances(main, sub));
出力結果
コンソールには次のように出力されます。なお、「is」という文字列は「This」の中にも含まれているため、それらも合わせて合計4回とカウントされています。
4
別の方法:split()を使う
正規表現を使いたくない場合は、split() メソッドでも同じことができます。部分文字列を区切り文字として元の文字列を分割すると、その配列の長さから1を引いた値が出現回数になります。
const countBySplit = (main, sub) => main.split(sub).length - 1; console.log(countBySplit(main, sub)); // 4
注意点
new RegExp() に渡す文字列に . や * などの正規表現の特殊文字が含まれている場合、意図しないマッチやエラーを避けるためにエスケープ処理が必要です。通常の英単語などを出現回数カウントの用途に使うのであれば、上記のシンプルな実装で十分に機能します。
-
JavaScriptで文字列を真偽値(Boolean)に変換する方法
JavaScriptでは、文字列が「true」というリテラルと一致するかどうかを比較演算子で判定することで、文字列を実質的に真偽値(Boolean)として扱うことができます。ここでは、==(緩い等価比較)と===(厳密等価比較)の2つの方法を使った具体例を紹介します。 サンプルコード <!DOCTYPE html> <html> <head> <style> body { font-family: &
-
JavaScriptで別の関数を返す関数の作り方とクロージャの仕組み
JavaScriptで関数を返す関数とは JavaScriptでは、関数の戻り値として別の関数を返すことができます。このテクニックは「クロージャ(closure)」と呼ばれる仕組みと密接に関係しており、返された関数は、外側の関数内で定義された変数にアクセスし続けることができるのが大きな特徴です。 以下は、JavaScriptで関数が別の関数を返すコード例です。 コード例 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8" /> <