首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript -带通配符(*)的过滤器

问JavaScript -带通配符(*)的过滤器
EN

Stack Overflow用户
提问于 2018-09-03 13:09:14
回答 1查看 10.1K关注 0票数 2

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

比方说,我有以下项目:

代码语言:javascript
复制
const items = ['Banana', 'Apple', 'Melon']

现在,我想使用以下字符串进行筛选:

代码语言:javascript
复制
e

预期输出:无

代码语言:javascript
复制
*e

预期产出:苹果

代码语言:javascript
复制
*e*

预期产量:苹果、甜瓜

代码语言:javascript
复制
ana

预期输出:无

代码语言:javascript
复制
*ana

预期输出: Banana

代码语言:javascript
复制
*an

预期输出:无

代码语言:javascript
复制
*an*

预期输出: Banana

我希望你明白我的意图。有没有用正则表达式或标准JS函数/库做这件事的聪明方法?到目前为止我找不到任何东西。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-03 13:14:50

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

​

代码语言:javascript
复制
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。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52143451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档