JavaScript-使用通配符(*)

时间:2018-09-03 05:09:14

标签: javascript

我想用最终的通配符过滤掉一组项目。

比方说,我有以下物品:

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

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

e

预期输出:无

*e

预期产量:苹果

*e*

预期产量:苹果,甜瓜

ana

预期输出:无

*ana

预期产量:香蕉

*an

预期输出:无

*an*

预期产量:香蕉

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

1 个答案:

答案 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