JavaScript RegEx:如果关键字字符串的任何部分匹配数组中的值,则返回true

JavaScript RegEx: Return true if any part of keyword string matches value in array

本文关键字:数组 true 返回 如果 RegEx 关键字 字符串 JavaScript 任何部      更新时间:2023-09-26

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

我有一个电视频道名称数组,我需要与来自搜索字段的值进行比较。如果搜索文本的任何部分匹配,则它通过。

所以搜索"dis"应该传递:
"Discovery Channel", "Disney Channel", "24 Hour Disco"

如何做到这一点?

您可以对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')));

不需要正则表达式,这:

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

当然,您总是可以使用regex。替换:

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);