通配符过滤

时间:2019-08-16 15:12:12

标签: javascript

我正在对缓存的查询结果进行过滤,以查看其是否具有搜索值。

 return this.cachedResults.filter(f => f.name.toLowerCase().indexOf(this.searchValue.toLowerCase()) !== -1); 

如果searchvaluef.name完全相同,则效果很好。我要过滤,即使它具有部分值。就像通配符过滤一样。我该怎么办?

2 个答案:

答案 0 :(得分:3)

如果f.name包含整个searchValue的位置无关紧要,那么您所做的工作也会部分匹配。

您可能还想要的是,即使searchValue包括整个f.name而不是相反的情况,它也应该匹配。

return this.cachedResults.filter(f => {
  return f.name.toLowerCase().indexOf(this.searchValue.toLowerCase()) !== -1)
    || this.searchValue.toLowerCase().indexOf(f.name.toLowerCase()) !== -1)
}

还考虑签出String.prototype.includes()

答案 1 :(得分:3)

尝试使用regexp(在?*通配符的支持下)

let cachedResults = ['abcdef', 'abc', 'xyz', 'adcf', 'abefg' ];
let wild = 'a?c*';

let re = new RegExp('^'+wild.replace(/\*/g,'.*').replace(/\?/g,'.')+'$');
let result = cachedResults.filter( x => re.test(x.toLowerCase()) );

console.log(result);