2016-09-12 7 views
2

何らかの理由で、VowelCount()は、隣接する母音のペアがある場合に1つの母音のみを数えます。たとえば、 "go"の "oe"を1つの母音として数えます。なぜこれが起こっているのか分かりません。 forEach関数を使用するか、forループを使用するかにかかわらず、これを行います。誰かが私の誤解を解決することができますか?しかし、グローバル検索/gはそれがeに失敗の原因となっている理由は、私はよく分からない私のVowelCount関数が適切な解決策を返さないのはなぜですか?

function VowelCount(str) { 
 
    var charArr = str.split(''); 
 
    var pattern = /[aeiou]/gi; 
 
    var vowelCount = 0; 
 
    /* 
 
    charArr.forEach(function(char) { 
 
    if (pattern.test(char)) { 
 
     //console.log(char); 
 
     vowelCount++; 
 
    } 
 
    }); 
 
    */ 
 
    for (var i = 0; i < charArr.length; i++) { 
 
    //console.log(charArr[i]); 
 
    if (pattern.test(charArr[i])) vowelCount++; 
 
    } 
 
    return vowelCount;    
 
} 
 

 
console.log(VowelCount("goes"));

+3

を:あなたは、配列をループする必要はありませんし、それが一致した場合、あなたのカウントを取得この方法で(または)と組み合わせて複数回呼び出された 'test()')と同じように、 '' exec()グローバル正規表現インスタンスは前回のマッチより進んでいきます "* gを削除すると、if(/ [aeiou] /gi.test()を実行してループの各繰り返しで新しい正規表現オブジェクトを作成するように、 charArr [i]))... ' – nnnnnn

+1

PS 'return(str.match(/ [aeiou]/gi)|| [])。length'はループを必要とせずに母音の数を返します。 – nnnnnn

答えて

1

は、ここに私のコードです。とにかく個々の文字をチェックしているので、グローバル検索は必要ありません。ここで

は作業バージョンです:

function VowelCount(str) { 
    var pattern = /[aeiou]/i; 
    var vowelCount = 0; 

    for (var i = 0; i < str.length; i++) { 
     if (pattern.test(str[i])){ 
      vowelCount++; 
     } 
    } 
    return vowelCount; 
} 

console.log(VowelCount("goes")); //2 

あなたはchar型の配列にそれを有効にする必要がないように私もそれを変えました。弦の上でのフォアリングは同じ目的を達成します。

+1

"g"フラグを削除するのは正しいです。 gを使用すると、正規表現はlastIndexというプロパティを維持します。lastIndexは高度になり、誤った結果が生じるまでリセットされません。 –

+0

@jeffcarey知っておくと便利です - 私は正規表現ではほとんど行いません。 –

0

あなたのパターンとmatch()機能を使用して母音の数を達成することができます。 //developer.mozilla:[ `.TEST()`メソッドのDOCO](HTTPSによる

var chars = 'fred is a flintstone'; 
var pattern = /[aeiou/gi; 
var matches = chars.match(pattern); 
var vowelCount = matches ? matches.length : 0; 
+0

また、私が上でコメントしたように、 'return(str.match(/ [aeiou]/gi)|| [])。length' ... – nnnnnn

+0

これはちょっと厄介です。 OPのステップを示すためにもう少し試してみる傾向があります(確かに私は説明なしで三元を使いました)。投稿する前にあなたのコメントを見ませんでした。 – scrappedcola

1
function VowelCount(subject) { 
    console.log(subject.match(/[aeiou]/gi)); 
    // or to get the length 
    console.log(subject.match(/[aeiou]/gi).length); 
} 

VowelCount("goes"); 
//result -> ["o", "e"] 
関連する問題