如何检查JavaScript中的元音?

时间:2011-03-30 14:55:45

标签: javascript regex

我应该编写一个接受字符(即长度为1的字符串)的函数,如果是元音则返回true,否则返回false。我想出了两个功能,但不知道哪个功能更好,哪个更适合我。使用RegEx的那个更简单,但我不确定是否应该尽量避免使用RegEx?

我没有RegEx的尝试:

function isVowel(char)
{
  if (char.length == 1)
  {
    var vowels = new Array('a','e','i','o','u');
    var isVowel = false;

    for(e in vowels)
    {
      if(vowels[e] == char)
      {
        isVowel = true;
      }
    }

    return isVowel;
  }
}

使用RegEx:

function isVowelRegEx(char)
{
  if (char.length == 1)
  {
    return /[aeiou]/.test(char);
  }
}

11 个答案:

答案 0 :(得分:39)

benchmark

我认为你可以放心地说for循环更快。

我承认regexp在代码方面看起来更干净。如果它是一个真正的瓶颈,那么使用for循环,否则坚持使用正则表达式,因为“优雅”

如果你想要简单,那就用

function isVowel(c) {
    return ['a', 'e', 'i', 'o', 'u'].indexOf(c.toLowerCase()) !== -1
}

答案 1 :(得分:16)

这里的答案很少,速度与这些小功能无关,除非你在短时间内给他们打了几十万次。对我来说,正则表达式是最好的,但要将它保存在闭包中,这样你就不会每次都构建它:

简单版本:

function vowelTest(s) {
  return (/^[aeiou]$/i).test(s);
}

更高效的版本:

var vowelTest = (function() {
  var re = /^[aeiou]$/i;
  return function(s) {
    return re.test(s);
  }
})();

如果true是单个元音(大写或小写),则s返回false

答案 2 :(得分:7)

循环,数组,正则表达式......为了什么?它可以更快:)

function isVowel(char)
{
    return char === 'a' || char === 'e' || char === 'i' || char === 'o' || char === 'u' || false;
}

答案 3 :(得分:3)

就个人而言,我会这样定义:

function isVowel( chr ){ return 'aeiou'.indexOf( chr[0].toLowerCase() ) !== -1 }

您也可以使用['a','e','i','o','u']并跳过长度测试,但每次调用该函数时都会创建一个数组。 (通过闭包可以模仿这种方法,但这些方法有点模糊不清)

答案 4 :(得分:3)

这是我想出的一个粗略的RegExp函数(它未经测试)

function isVowel(char) {
    return /^[aeiou]$/.test(char.toLowerCase());
}

这意味着if (char.length == 1 && 'aeiou' is contained in char.toLowerCase()) then return true

答案 5 :(得分:1)

function isVowel(char)
{
  if (char.length == 1)
  {
    var vowels = "aeiou";
    var isVowel = vowels.indexOf(char) >= 0 ? true : false;

    return isVowel;
  }
}

基本上它会检查元音字符串中字符的索引。如果它是辅音,而不在字符串中,indexOf将返回-1。

答案 6 :(得分:1)

我有点喜欢这种方法,我认为它涵盖了所有基础:

const matches = str.match(/aeiou/gi];
return matches ? matches.length : 0;

答案 7 :(得分:0)

let value = 1

switch true {
case (1...).contains(value):
    print("greater than zero")
case (..<0).contains(value):
    print("less than zero")
default:
    print("zero")
}

基本上它会返回给定字符串中的所有元音。

答案 8 :(得分:0)

我使用Array.prototype.includes()创建了一个简化版本。我的技术类似于@Kunle Babatunde

const isVowel = (char) => ["a", "e", "i", "o", "u"].includes(char);

console.log(isVowel("o"), isVowel("s"));

答案 9 :(得分:0)

我就是这样做的,在任何给定的单词中第一次出现元音时,它会跳出循环并返回 true。

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

function isVowel(word) {
    let result = false;
    for (let i = 0; i < word.length; i++) {
        if (vowels.includes(word[i])) {
            result = true;
            break;
        }
    }
    return result;

答案 10 :(得分:-1)

  //function to find vowel
const vowel = (str)=>{
  //these are vowels we want to check for
  const check = ['a','e','i','o','u'];
  //keep track of vowels
  var count = 0;
  for(let char of str.toLowerCase())
  {
    //check if each character in string is in vowel array
    if(check.includes(char)) count++;
  }
  return count;
}

console.log(vowel("hello there"));