function VowelCount(str) {
var counter=0;
for(i=0; i<str.length; i++)
{
if (/[AEIOUaeiou]/g.test(str[i]))
{
counter += 1;
}
}
return counter;
}
VowelCount("aaaeeebziiiooouu");
这在repl.it上返回“14”,但在coderbyte上只返回“7”。
我错过了什么?
答案 0 :(得分:2)
虽然其他人是对的,但您应该使用match
。您问为什么它不起作用,这是因为您在正则表达式上设置了g
标志,因此它会跟踪上一个匹配项的lastIndex
并开始从该索引中查找后续匹配项
E.g。
var rx = /a/g;
rx.test('aa'); //true
console.log(rx.lastIndex); //1
rx.test('a'); //false
答案 1 :(得分:1)
您可以使用match
并计算其length
:
function vowelCount(str) {
return (str.match(/[aeiou]/gi) || []).length;
}
我错过了什么?
修改:您的代码在这里工作正常http://jsbin.com/osesoh/1/edit
答案 2 :(得分:1)
@ user1544566发现了这个问题的答案并将其发布在评论中,但他没有给出答案。他说:
coderbyte hates the extra g (thanks Mr. Hazmat) Removing the g makes everything work.
显然,Coderbyte会运行您错误提交的代码。看来你发现了一个bug。我会考虑向他们报告。