По какой-то причине VowelCount() учитывает только одну гласную в случае, когда имеется пара смежных гласных. Например, он считает «oe» в «идет» как один гласный. Я не понимаю, почему это происходит. Он делает это независимо от того, использую ли я функцию forEach или цикл for. Может ли кто-нибудь прояснить мое недоразумение?Почему моя функция 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"));
Согласно [ '.test()' метод DOCO] (https: //developer.mozilla .org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test), * "как в случае с' exec() '(или в сочетании с ним),' test() 'вызывает несколько раз на том же глобальный экземпляр регулярного выражения будет продвигаться мимо предыдущего совпадения ». * Таким образом, удаление' g' исправляет вашу проблему, так же как и создание нового объекта регулярного выражения на каждой итерации цикла, делая if (/ [aeiou] /gi.test (charArr [i])) ... ' – nnnnnn
PS 'return (str.match (/ [aeiou]/gi) || []). length' даст вам количество гласных без необходимости в цикле. – nnnnnn