regex 检查元音的JavaScript函数

kqhtkvqz  于 2023-06-25  发布在  Java
关注(0)|答案(3)|浏览(104)

我知道这是一个基本的问题,但我试图通过一个初学者的编码问题,我坚持为什么这段代码不工作。
这是我到目前为止所拥有的:

const myString = "Testing for vowels";

const vowels = ["a", "e", "i", "o", "u", "y"];

function countVowels(myString) {
  let count = 0;

  if (vowels.includes(myString)) {
    count++;
  }

  return count
}

const result = countVowels(myString);

console.log(result);

当它注销时,它只是保持0。很明显我漏掉了什么,但我不确定是什么。我已经设置了元音是什么,我想我是在问,如果我在数组中设置的元音在我的字符串中,增加计数,但它只是给我0。我知道这很明显,但我卡住了。
我尝试了一个for循环,然后我想它可能需要一个if语句,现在我在一个函数中有了它。我还没能得到答案,所以我不认为我正确地告诉代码元音是什么,但我不知道如何做到这一点。

fzwojiic

fzwojiic1#

你必须使用for循环来检查每个字符是否包含在元音数组中,如下所示:

const myString = "Testing for vowels";

const vowels = ["a", "e", "i", "o", "u", "y"];

function countVowels(myString) {
  let count = 0;

  for(let i = 0 ;  i < myString.length ; i++) {
    if(vowels.includes(myString[i])) {
      count++ ; 
    }
  }

  return count
}

const result = countVowels(myString);

console.log(result);
7rfyedvj

7rfyedvj2#

一个简单的大小写-insensitive andglobally flagged regex like... /[aeiou]/gi ...它在character set中列出了所有元音,通过match应用,已经完成了这项工作。后一个操作返回数组或null值。因此,像这样的表达…

'Testing for vowels'.match(/[aeiou]/gi)?.length ?? 0

...就是我们需要的
为了防止在null匹配的情况下出现TypeError,其中无法访问length属性,但仍然希望得到有意义的结果,可以同时使用Optional Chaining Operator / ?.Nullish Coalescing Operator / ??
示例代码…

console.log(
  "'Testing for vowels'.match(/[aeiou]/gi) ...",
  'Testing for vowels'.match(/[aeiou]/gi)
);
console.log(
  "''.match(/[aeiou]/gi) ...",
  ''.match(/[aeiou]/gi)
);
console.log('\n');

console.log(
  "'Testing for vowels'.match(/[aeiou]/gi)?.length ?? 0 ...",
  'Testing for vowels'.match(/[aeiou]/gi)?.length ?? 0
);
console.log(
  "''.match(/[aeiou]/gi)?.length ?? 0 ...",
  ''.match(/[aeiou]/gi)?.length ?? 0
);
.as-console-wrapper { min-height: 100%!important; top: 0; }

countVowels的实现就像这样简单。

function countVowels(value) {
  return String(value).match(/[aeiou]/gi)?.length ?? 0;
}

或者说...

function countVowels(value) {
  return String(value ?? '').match(/[aeiou]/gi)?.length ?? 0;
}

。。。后者可以像下面这样测试。。

function countVowels(value) {
  return String(value ?? '').match(/[aeiou]/gi)?.length ?? 0;
}

console.log(
  "countVowels('Testing for vowels') ...",
  countVowels('Testing for vowels')
);
console.log(
  "countVowels('') ...",
  countVowels('')
);
console.log('\n');

console.log(
  "countVowels() ...",
  countVowels()
);
console.log(
  "countVowels(null) ...",
  countVowels(null)
);
console.log('\n');

console.log(
  "countVowels('NULL') ...",
  countVowels('NULL')
);
console.log(
  "countVowels('UNDEFINED') ...",
  countVowels('UNDEFINED')
);
.as-console-wrapper { min-height: 100%!important; top: 0; }
aij0ehis

aij0ehis3#

const myString = "Testing for vowels";

const vowels = ["a", "e", "i", "o", "u", "y"];

function countVowels(myString) {
  let count = 0;

  for(i = 0; i < myString.length; i++){
    if (vowels.includes(myString.substring(i,i+1))) {
      count++;
    }
   }
  return count
}

const result = countVowels(myString);

console.log(result);

相关问题