我有一段时间让一个简单的正则表达式工作。我讨厌正则表达式:(
我有一系列电视频道名称需要与来自搜索字段的值进行比较。如果搜索文本的任何部分匹配,则它会通过。否则就失败了。
因此,搜索"dis"
应该通过:
"Discovery Channel"
,"Disney Channel"
,"24 Hour Disco"
等
怎么可能这样做?
答案 0 :(得分:5)
您可以使用filter
和match
这样做:
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);