JavaScript RegEx:如果关键字字符串的任何部分与数组

时间:2015-08-27 21:17:40

标签: javascript regex

我有一段时间让一个简单的正则表达式工作。我讨厌正则表达式:(

我有一系列电视频道名称需要与来自搜索字段的值进行比较。如果搜索文本的任何部分匹配,则它会通过。否则就失败了。

因此,搜索"dis"应该通过:
"Discovery Channel""Disney Channel""24 Hour Disco"

怎么可能这样做?

2 个答案:

答案 0 :(得分:5)

您可以使用filtermatch这样做:

var channels = ["Discovery Channel", "Disney Channel", "24 Hour Disco", "CNN"];

var filter = function(channel) { 
    return channel.match(/dis/i); 
};

alert(channels.filter(filter));

如果你必须传递你的查询部分,你可以调用这样的函数:

var channels = ["Discovery Channel", "Disney Channel", "24 Hour Disco", "CNN"];

var filter = function(term) {     
    return function(channel) {
        return channel.match(new RegExp(term, "i")); 
    }
};

alert(channels.filter(filter('dis')));

答案 1 :(得分:3)

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

var data = ["Discovery Channel", "Disney Channel", "24 Hour Disco", "foo", "bar", "fail"];
for(i = 0; i < data.length; i++) {
    if(data[i].toLowerCase().indexOf('dis') !== -1) {
        console.log(data[i]);
    }
}

输出:

Discovery Channel
Disney Channel
24 Hour Disco

当然,你总是可以使用正则表达式。替换:

data[i].toLowerCase().indexOf('dis') !== -1

有了这个:

data[i].match(/dis/i)

<强> 更新

对于正则表达式解决方案...如果变量中包含'dis',则可以直接构造RegExp对象:

var pattern = 'dis';
var regex = new RegExp(pattern, 'i');

data[i].match(regex);