【问题标题】:Regex and Array: Most efficient approach正则表达式和数组:最有效的方法
【发布时间】:2016-05-29 21:47:25
【问题描述】:

我想从数组中获取所有带有<=3 字母的单词。

迭代数组并检查每个条目是一种有效的方法吗?

arr = ["cat", "apple", "window", "dog"];

for(i=0; i<arr.length; i++){
    if(arr[i].match(/^[a-z]{3}$/)){
        console.log(arr[i])
    }
}

//returns: "cat" and "dog"

或者是否已经有一个内置函数可以为我完成这项工作,所以我不必显式定义 for 循环和 if 语句。

【问题讨论】:

  • 检查每个字符串的.length 怎么样?
  • 更多的是使用正则表达式和数组。在我的示例中,将执行哪种正则表达式不太重要。
  • 所以你想使用正则表达式来使用正则表达式?好的。
  • @user1170330 不,你不是。您的问题清楚地表明您希望数组中的所有元素都具有某种长度限制。这与需要正则表达式无关;只需使用filter,它已经融入 JS 并且已经使用多年了。

标签: javascript arrays regex


【解决方案1】:

不需要正则表达式,试试这个:

var arr = ["cat", "apple", "window", "dog"];
var len = arr.length;

for(len; len<=0; len--){
    if(arr[len].length <= 3){
        console.log(arr[len]);
    }
}

编辑:如果您不想明确定义 for 循环和 if 语句,请尝试使用 .filter().match()

var arr = ["cat", "apple", "window", "dog"];
var AcceptedItems = arr.filter(function(item) {
    return item.match(/^[a-z]{1,3}$/);
});

【讨论】:

  • 遗憾的是,这个问题的提出非常糟糕,以至于这个答案没有达到预期的目标,即使它解决了问题措辞中提出的问题。必须深入研究 cmets 才能弄清楚 OP 真正想要什么。
  • @JonathanM 我阅读了 cmets 并编辑了我的答案......谢谢
  • @Shafizadeh:您的第二个答案正是我想要的。谢谢!
  • @user1170330 很高兴为您提供帮助:-)
【解决方案2】:

我假设您想要返回甚至像“1abc”这样的单词,因为它只有 3 个字母。

下面将工作,使用数组的filter 函数。

arr = ["cat", "apple", "window", "dog", "1acb", "1abcd"];

function getLessThanThree(anArray){
    return anArray.filter(function(v){
        return !( /[a-zA-Z]{3}./.exec(v) );
    })
}

console.log(getLessThanThree(arr)); // logs [ 'cat', 'dog', '1acb' ]

测试一下here

【讨论】:

  • +1 用于使用正则表达式回答 OP,不使用 for 循环,并使用可以任意从长度检查更改为他可能需要实现的任何其他正则表达式验证方法的正则表达式。
【解决方案3】:

如果您想获得与数组中的某项匹配的项目,则需要对其进行迭代。

无论如何,从 ECMA-Script 5 开始,您将重构您的代码,如下所示:

var results = arr.filter(function(item) { return item.lengh <= 3; });

或者在 ECMA-Script 6 及更高版本中:

var results = arr.filter(item => item.length <= 3);

就生产力而言,你会更快

【讨论】:

  • 我想从数组中获取所有带有&lt;=3 字母的单词。&lt;=3 letters 要求意味着您需要item.test(/^[a-z]{1,3}$/i);。您的 /^[a-z]{3}$/ 正好匹配 3 个小写字母单词。
  • 看看 OP 怎么说。 OP 不是要求更好的正则表达式,而是更快地找到结果。
  • 不,有人用不必要的 cmets 让 OP 感到困惑,因为这里不需要正则表达式。
【解决方案4】:

您使用的是 JavaScript。它已经可以做到这一点,不需要正则表达式。

var arr = ["cat", "apple", "window", "dog"];
var filtered = arr.filter(function(e) { return e.length <= 3; });

完成。使用 ES6 获得更简单的语法:

var filtered = arr.filter(e => e.length <= 3);

【讨论】:

    【解决方案5】:

    给这只猫剥皮的方法很多,我喜欢:

    var arr = ["cat", "apple", "window", "dog"];
    var upToThreeLetters = function(word) {
      return word.length <= 3;
    }
    var filteredArr = arr.filter(upToThreeLetters);

    【讨论】:

      猜你喜欢
      • 2023-04-09
      • 2016-09-02
      • 1970-01-01
      • 2011-08-05
      • 1970-01-01
      • 2012-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多