出于某种原因,VowelCount()仅在存在一对相邻元音的情况下才计算一个元音。例如,它将“go”中的“oe”计为一个元音。我不明白为什么会这样。无论我使用forEach函数还是for循环,它都会这样做。任何人都可以解决我的误解吗?
这是我的代码:
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"));
答案 0 :(得分:1)
我不确定原因,但全局搜索/g
导致e
失败。您无需进行全局搜索,因为无论如何都要检查个别字符。
这是一个工作版本:
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 :(得分: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"]
答案 2 :(得分:0)
您可以使用您的模式和match()
功能来实现元音的数量。这样你就不需要循环遍历一个数组,如果匹配就得到你的计数:
var chars = 'fred is a flintstone';
var pattern = /[aeiou/gi;
var matches = chars.match(pattern);
var vowelCount = matches ? matches.length : 0;