首页 > 解决方案 > JavaScript - 使用通配符 (*) 过滤

问题描述

我想过滤带有最终通配符的项目集合。

比方说,我有以下物品:

const items = ['Banana', 'Apple', 'Melon']

我现在想使用以下字符串进行过滤:

e

预期输出:无

*e

预期产出:苹果

*e*

预期产出:苹果、甜瓜

ana

预期输出:无

*ana

预期产出:香蕉

*an

预期输出:无

*an*

预期产出:香蕉

我希望你明白我的意图。使用正则表达式或标准 JS 函数/库有什么聪明的方法吗?到目前为止我找不到东西。

标签: javascript

解决方案


*您可以通过将s替换为以匹配任何字符来构造正则表达式,并用and.*包围通配符字符串(以匹配开头和结尾):^$

const items = ['Banana', 'Apple', 'Melon']

const filterBy = str => items.filter(
  item => new RegExp('^' + str.replace(/\*/g, '.*') + '$').test(item)
);
console.log(filterBy('e'));
console.log(filterBy('*e'));
console.log(filterBy('*e*'));
console.log(filterBy('ana'));
console.log(filterBy('*ana'));
console.log(filterBy('*an'));
console.log(filterBy('*an*'));

请注意,如果通配符字符串在正则表达式中有任何其他具有特殊含义的字符,则必须先将它们转义


推荐阅读