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

我错过了什么?

4

3 回答 3

2

虽然其他人是对的,但您应该match改用。您问为什么它不起作用,这是因为您g在正则表达式上设置了标志,因此它将跟踪lastIndex上一场比赛的 ,并开始从该索引开始查找后续比赛。

例如

var rx = /a/g;

rx.test('aa'); //true

console.log(rx.lastIndex); //1

rx.test('a'); //false
于 2013-08-15T21:41:58.153 回答
1

@user1544566 发现了这个问题的答案并将其发布在评论中,但他没有为此写答案。他说:

coderbyte hates the extra g (thanks Mr. Hazmat) Removing the g makes everything work.

显然,Coderbyte 错误地运行了您提交的代码。看来您发现了一个错误。我会考虑向他们报告。

于 2013-08-15T21:41:32.947 回答
1

您可以使用match并计算其length

function vowelCount(str) {
  return (str.match(/[aeiou]/gi) || []).length;
}

我错过了什么?

编辑:您的代码在这里工作正常http://jsbin.com/osesoh/1/edit

于 2013-08-15T21:33:03.193 回答