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

あなたはそれを使用matchして数えることができますlength

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

私は何を逃したのですか?

編集:あなたのコードはここでうまく動作しますhttp://jsbin.com/osesoh/1/edit

于 2013-08-15T21:33:03.193 に答える
1

@ user1544566 は、この質問に対する回答を発見し、コメントに投稿しましたが、回答を書きませんでした。彼は言った:

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

どうやら Coderbyte は、あなたが間違って提出したコードを実行します。バグを発見したようです。私はそれを彼らに報告することを検討します。

于 2013-08-15T21:41:32.947 に答える