javascript - JavaScript - 使用通配符 (*) 过滤
问题描述
我想过滤带有最终通配符的项目集合。
比方说,我有以下物品:
const items = ['Banana', 'Apple', 'Melon']
我现在想使用以下字符串进行过滤:
e
预期输出:无
*e
预期产出:苹果
*e*
预期产出:苹果、甜瓜
ana
预期输出:无
*ana
预期产出:香蕉
*an
预期输出:无
*an*
预期产出:香蕉
我希望你明白我的意图。使用正则表达式或标准 JS 函数/库有什么聪明的方法吗?到目前为止我找不到东西。
解决方案
*
您可以通过将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*'));
请注意,如果通配符字符串在正则表达式中有任何其他具有特殊含义的字符,则必须先将它们转义。
推荐阅读
- extjs - 如何使标签面板选项卡中的标题绑定在 ExtJS7 中工作?
- reactjs - 是否可以在条件语句中使用 useMemo 挂钩?
- python - 使用 django 创建多语言网站
- javascript - React Native 随机颜色对生成器
- python - keras-rl2 强化学习代理重塑数据
- r - 在 R(ggplot2)中,如何为向上/向下移动估计线的二进制变量添加箭头?
- swift - Swift 类型在泛型约束处不符合协议错误,但在类本身不符合
- angular - 如何获得以前的价值主题?
- apache-kafka - 为什么发布/订阅系统的吞吐量是稳定的?
- swift - 使用 Firebase 检测 iOS 越狱