正则表达式和数组:最有效的方法

时间:2016-02-17 22:55:00

标签: javascript arrays regex

我希望从数组中获取<=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语句。

5 个答案:

答案 0 :(得分:3)

无需正则表达式,试试这个:

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-loop和if语句,请尝试使用.filter().match()

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

答案 1 :(得分:2)

我假设您想要返回甚至类似于&#39; 1abc&#39;因为它只有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

答案 2 :(得分:1)

如果你想获得与数组匹配的项目,你需要迭代它。

无论如何,从ECMA-Script 5开始,您将按如下方式重构代码:

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

或者在ECMA-Script 6及以上版本中:

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

就生产力而言,你会更快

答案 3 :(得分:0)

你在使用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);

答案 4 :(得分:0)

很多方法可以给这只猫上皮,我喜欢:

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