我已经浏览了很多关于此的文章,但找不到有效的文章。 我有要搜索的对象关键字,看看它们中是否有两个特定的单词中的一个,如果存在则对其进行过滤。
示例:
const obj = {
time_pop: 'fhfvla',
icon: 'dsfval',
home_pops: 'valffg',
title: 'sdfsdfs',
pop: 'sfsdfsd',
rattle: 'sdfdsf',
pops: 'sfsdfsdf'
}
我想要一个可以找到pop ||这个词的正则表达式弹出对象键。 我目前正在遍历并拥有密钥,并将其用作我的正则表达式
const expr = /\b(pop|pops)\b/;
const only = Object.entries(obj).filter(([k, v]) => {
return expr.test(k);
})
以上仅适用于一个单词,如果其中包含_则无效。 例如,这不起作用。 time_pop home_pops
当它们应该返回true时它们将返回false,因为其中包含一个或多个pop这个词。
答案 0 :(得分:0)
如果要部分匹配,可以使用/pops?/
。
const obj = {time_pop: 'fhfvla',icon: 'dsfval',home_pops: 'valffg',title: 'sdfsdfs',pop: 'sfsdfsd',rattle: 'sdfdsf',pops: 'sfsdfsdf'}
const only = Object.entries(obj).filter(([k, v]) => {
return /pops?/g.test(k)
})
console.log(only)
答案 1 :(得分:0)
这里,您的代码中也存在错误(语法)。
const obj = {
time_pop: 'fhfvla',
icon: 'dsfval',
home_pops: 'valffg',
title: 'sdfsdfs',
pop: 'sfsdfsd',
rattle: 'sdfdsf',
pops: 'sfsdfsdf'
};
const expr = /pop|pops/;
const only = Object.entries(obj).filter(([k, v]) => expr.test(k));
console.log(only);
答案 2 :(得分:0)
在正则表达式中,元字符\b
表示单词边界。本质上,只有在(pop|pops)
之前有非单词字符时,它才会匹配。但是,下划线是文字字符。试试:
const expr = /(\b|_)(pop|pops)\b/