javascript正则表达式匹配数组以查找多个项目

时间:2014-10-19 09:04:54

标签: javascript arrays regex

是否可以在数组上进行正则表达式匹配以查找包含特定字母的所有项目?

我的数组是:

var myArray = [
    "move",
    "mind",
    "mouse",
    "mountain",
    "melon"
];

我需要找到包含字母的所有项目:“mo”,使用这样的正则表达式匹配:

/mo\w+/igm

要输出这些词:'移动','鼠标','山' ......

我试过这个,但是不能正常工作,它只输出一个项目..

Array.prototype.MatchInArray = function(value){
    var i;
    for (i=0; i < this.length; i++){
        if (this[i].match(value)){
            return this[i];
        }
    }
    return false;
};
console.log(myArray.MatchInArray(/mo/g));

1 个答案:

答案 0 :(得分:3)

您甚至不需要RegEx,您只需使用Array.prototype.filter,就像这样

console.log(myArray.filter(function(currentItem) {
    return currentItem.toLowerCase().indexOf("mo") !== -1;
}));
# [ 'move', 'mouse', 'mountain' ]

JavaScript字符串有一个名为String.prototype.indexOf的方法,它将查找作为参数传递的字符串,如果找不到,则返回-1,否则返回第一个匹配的索引。

编辑您可以使用Array.prototype.filter重写原型函数,就像这样

Object.defineProperty(Array.prototype, "MatchInArray", {
    enumerable: false,
    value: function(value) {
        return this.filter(function(currentItem) {
            return currentItem.match(value);
        });
    }
});

这样你就可以得到所有的比赛。这是因为,如果正则表达式与当前字符串不匹配,那么它将返回null,这在JavaScript中被视为假,因此该字符串将被过滤掉。

注意:从技术上讲,您的MatchInArray功能与Array.prototype.filter功能的作用相同。因此,最好使用内置的filter本身。