我使用此代码来搜索和计算字符串中的元音,
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个元音。 怎么了?你怎么能简化呢?
答案 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)");
答案 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;
}