如何在JavaScript中检查元音?

Max*_*Max 22 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;
  }
}
Run Code Online (Sandbox Code Playgroud)

使用RegEx:

function isVowelRegEx(char)
{
  if (char.length == 1)
  {
    return /[aeiou]/.test(char);
  }
}
Run Code Online (Sandbox Code Playgroud)

Ray*_*nos 42

基准

我想你可以放心地说for循环更快.

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

如果你想要简单,那就用吧

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


Rob*_*obG 19

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

简单版本:

function vowelTest(s) {
  return (/^[aeiou]$/i).test(s);
}
Run Code Online (Sandbox Code Playgroud)

更高效的版本:

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

返回trueif s是单个元音(大写还是小写)以及false其他所有元音.


Emm*_*man 8

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

function isVowel(char)
{
    return char === 'a' || char === 'e' || char === 'i' || char === 'o' || char === 'u' || false;
}
Run Code Online (Sandbox Code Playgroud)


Jos*_*ado 5

function findVowels(str) {
  return str.match(/[aeiou]/ig);
}

findVowels('abracadabra'); // 'aaaaa'
Run Code Online (Sandbox Code Playgroud)

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


Håv*_*ard 2

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

    return isVowel;
  }
}
Run Code Online (Sandbox Code Playgroud)

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