用javascript计算元音

时间:2013-02-16 17:15:38

标签: javascript string

我使用此代码来搜索和计算字符串中的元音,

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个元音。 怎么了?你怎么能简化呢?

5 个答案:

答案 0 :(得分:5)

试试这个:

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

|确保没有边缘情况,例如在字符串的开头或结尾处有元音。

答案 1 :(得分: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)");

Demo

答案 2 :(得分: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")

首先,拆分是没用的,因为你已经可以遍历每个角色了。

第二:你需要使用i<a.length,这也是字符串中的最后一个字符。

答案 3 :(得分:1)

最简单的方法是

s.match(/[aeiou]/gi).length

答案 4 :(得分:0)

您可以使用.match将字符串与正则表达式进行比较。 g是全局的,它将遍历整个字符串。我使字符串可读为大写和小写。

function getVowels(str) {
      var m = str.match(/[aeiou]/gi);
      return m === null ? 0 : m.length;
    }