为什么这个元音计数失败了?

时间:2013-08-15 21:30:33

标签: javascript

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”。

我错过了什么?

3 个答案:

答案 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。我会考虑向他们报告。