1

このコードを使用して、文字列内の母音を検索してカウントします。

a = "run forest, run";
a = a.split(" ");
var syl = 0;
for (var i = 0; i < a.length - 1; i++) {
    for (var i2 = 0; i2 < a[i].length - 1; i2++) {
        if ('aouie'.search(a[i][i2]) > -1) {
            syl++;
        }
    }
}

alert(syl + " vowels")

明らかに、4つの母音を警告する必要がありますが、3を返します。何が問題で、どのように単純化できますか?

4

5 に答える 5

5

これを試して:

var syl = ("|"+a+"|").split(/[aeiou]/i).length-1;

|は、弦の最初または最後に母音があるなどのエッジケースがないことを保証します。

于 2013-02-16T17:19:00.073 に答える
4

あなたのコードに関して、あなたのif条件はi2を必要としません

if('aouie'.search(a[i]) > -1){ 

なぜ配列とネストされたループを使用するのか、以下のregex方がうまくいくのだろうか、

var str = "run forest, run";
var matches = str.match(/[aeiou]/gi);
    var count = matches ? matches.length : 0;
    alert(count + " vowel(s)");

デモ

于 2013-02-16T17:25:11.667 に答える
2

試す:

a = "run forest, run";

var syl = 0;

for(var i=0; i<a.length; i++) {
        if('aouie'.search(a[i]) > -1){ 
            syl++;
        }
}

alert(syl+" vowels")

まず、すべてのキャラクターをすでに循環できるため、分割は役に立ちません。

2番目:を使用する必要がありますi<a.length。これも文字列の最後の文字を取得します。

于 2013-02-16T17:18:44.140 に答える
1

最も簡単な方法は

s.match(/[aeiou]/gi).length
于 2014-12-10T10:40:14.307 に答える
0

.matchを使用して、文字列を正規表現と比較できます。gはグローバルであり、文字列全体を実行します。文字列を大文字と小文字で読みやすくします。

function getVowels(str) {
      var m = str.match(/[aeiou]/gi);
      return m === null ? 0 : m.length;
    }
于 2015-05-18T08:50:55.600 に答える