代码之家  ›  专栏  ›  技术社区  ›  me-me

regex以匹配字符串中的两个不同单词

  •  0
  • me-me  · 技术社区  · 6 年前

    我浏览了这么多关于这个的帖子,但找不到一个有效的。 我有一些对象键,我想搜索它们,看看它们是否包含两个特定的词中的任何一个,如果存在,就过滤它们。

    例子:

    const obj = {
       time_pop: 'fhfvla',
       icon: 'dsfval',
       home_pops: 'valffg',
       title: 'sdfsdfs',
       pop: 'sfsdfsd',
       rattle: 'sdfdsf',
       pops: 'sfsdfsdf'
    }
    

    我想要一个能在对象键中找到pop_pops这个词的regex。 我现在正在循环使用密钥,并将其用作正则表达式

      const expr = /\b(pop|pops)\b/;
    
      const only = Object.entries(obj).filter(([k, v]) => {
        return expr.test(k);
      })
    

    以上仅适用于一个单词,如果其中有一个单词,则不适用。 例如,这不起作用。 时间流行 国内流行音乐

    当它们应该返回“真”时,它们返回“假”,因为其中包含“pop”或“pops”两个词。

    3 回复  |  直到 6 年前
        1
  •  0
  •   Code Maniac    6 年前

    你可以使用 /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)
        2
  •  0
  •   Bibberty    6 年前

    在这里,代码中也有错误(语法)。

    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);
        3
  •  0
  •   Steven Kaufman    6 年前

    在正则表达式中,元字符 \b 表示单词边界。本质上,只有在前面有非单词字符时才匹配 (pop|pops) . 然而,下划线是一个单词字符。尝试:

    const expr = /(\b|_)(pop|pops)\b/