我想用最终的通配符过滤掉一组项目。
比方说,我有以下物品:
const items = ['Banana', 'Apple', 'Melon']
我现在要使用以下字符串进行过滤:
e
预期输出:无
*e
预期产量:苹果
*e*
预期产量:苹果,甜瓜
ana
预期输出:无
*ana
预期产量:香蕉
*an
预期输出:无
*an*
预期产量:香蕉
我希望你能得到我的意图。使用正则表达式或标准JS函数/库有什么聪明的方法吗?到目前为止我找不到任何东西。
答案 0 :(得分:6)
您可以构造一个正则表达式,方法是将*
替换为.*
以匹配任何字符,并用^
和$
包围通配符字符串(以匹配开头和结尾):
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*'));
请注意,如果通配符字符串在正则表达式中包含其他具有特殊含义的字符,则必须escape them first。