使用Underscore.js进行不区分大小写的数组过滤

时间:2017-01-17 17:44:32

标签: javascript filter autocomplete underscore.js case-insensitive

如何使用Underscore过滤使用全文搜索的字符串数组?

我指的是一个匹配任意数量字符的过滤器,从字符串中的任何位置开始(不仅仅是从头开始)。

该功能对自动完成功能非常有用。 例如,在全名数组中,查找中间名或姓氏。

1 个答案:

答案 0 :(得分:1)

首先创建一个like下划线mixin。此函数将使用正则表达式比较字符串(必须转义正则表达式特殊字符)。

_.mixin({ 

  like: function(text, likeExpr) { 
    var regex = new RegExp(text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'), 'i');
    return regex.test(likeExpr); 
  } 

});

可以使用如下:

_.like('whatever', 'Something something WhaTEvEr something.'); // true

然后,您可以使用此功能过滤数组:

_.filter(array, function(text) {
  return _.like('string to match', text);
});