正则表达式匹配字符串中的2个不同的单词

时间:2019-02-09 05:18:07

标签: javascript regex

我已经浏览了很多关于此的文章,但找不到有效的文章。 我有要搜索的对象关键字,看看它们中是否有两个特定的单词中的一个,如果存在则对其进行过滤。

示例:

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这个词。

3 个答案:

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