JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptで文字列内の母音の数をカウントする方法をわかりやすく解説


文字列内の母音の数を数えるとは

英語における母音は「a」「e」「i」「o」「u」の5つです。対象となる文字列の中には、これらの母音が大文字・小文字どちらで含まれている可能性もあるため、両方のケースに対応できるロジックを用意する必要があります。

処理の流れ

以下の例では、ユーザー定義関数 noOfVowels() を作成し、入力された文字列を先頭から読み込みながら、母音だけを集めた文字列 'aAeEiIoOuU' と照合していきます。この照合処理には indexOf() メソッドを活用します。

indexOf() メソッドは、指定した文字が対象の文字列内に存在する場合にそのインデックス位置を返し、存在しない場合は「-1」を返すという特徴があります。ここでは入力文字列の各文字を順番に母音文字列と比較し、母音が一致するたびに、初期値0で定義された変数 vowelsCount をインクリメントしていきます。ループが完了した時点での vowelsCount の値が、文字列内に含まれる母音の総数となります。

サンプルコード

<html>
<body>
<script>
    function noOfVowels(string) {
        var listOfVowels = 'aAeEiIoOuU';
        var vowelsCount = 0;
        for(var i = 0; i < string.length ; i++) {
            if (listOfVowels.indexOf(string[i]) !== -1) {
                vowelsCount += 1;
            }
        }
        return vowelsCount;
    }
    document.write(noOfVowels("Tutorix is one of the best e-platforms"));
</script>
</body>
</html>

実行結果

12

正規表現を使ったより簡潔な書き方

ループ処理を書かずにもっとシンプルに実装したい場合は、正規表現と match() メソッドを組み合わせる方法が便利です。フラグ /gi を使うことで、大文字・小文字を区別せずにすべての母音を一度に抽出できます。

function countVowels(str) {
    const matches = str.match(/[aeiou]/gi);
    return matches ? matches.length : 0;
}

console.log(countVowels("Tutorix is one of the best e-platforms")); // 12

match() は該当する文字が見つからなかった場合に null を返すため、上記のように三項演算子で null チェックを行い、0 を返すようにしておくと安全です。

まとめ

文字列内の母音を数える基本的なアプローチは、「母音の一覧との照合」と「一致回数のカウント」の2ステップです。indexOf() を使ったループ処理は初心者にも理解しやすく、一方で正規表現を使えば短いコードで同じ結果が得られます。用途や可読性の要件に応じて使い分けるとよいでしょう。

  1. 【JavaScript入門】文字列と数値を連結せずに足し算する方法

    JavaScriptでは、文字列と数値を「+」演算子で組み合わせると、加算ではなく連結(文字列の結合)が実行されます。これは、片方のオペランドが文字列である場合、もう片方も自動的に文字列へ変換されるためです。意図した計算結果を得るためには、文字列をあらかじめ数値へ変換しておく必要があります。 本記事では、単項プラス演算子「+」やparseInt()を使って、文字列と数値を正しく加算する方法を具体例とともに解説します。 例1:そのまま加算すると連結される 次の例では、変換を行わずに文字列を数値と直接足しています。この場合、加算ではなく連結が行われ、「1005」という結果が出力されます。 &l

  2. JavaScriptで文字列内の母音の数を数える方法

    文字列を受け取るJavaScript関数を作成する必要があります。この関数は、文字列に含まれる母音(a、e、i、o、u)の数を数え、各母音とその出現回数を対応付けたオブジェクトとして返すものです。 実装コード 以下がそのコード例です。 { if (vowels.indexOf(letter.toLowerCase()) !== -1) { if (letter in obj) { obj[letter]++; } else { obj[letter] = 1;