代码之家  ›  专栏  ›  技术社区  ›  aenagy

regexp匹配包含“apple”但与同一字符串中的“orange”不匹配的字符串

  •  1
  • aenagy  · 技术社区  · 8 年前

    给出以下数据

    green-pineapple-bird
    red-apple-dog  
    blue-apple-cat  
    green-apple-orange-horse  
    green-apple-mouse  
    

    我试图找出如何使(javascript)regexp.test()匹配任何包含单词“apple”(anywhere)但不匹配任何包含单词“orange”(anywhere)的条目。最终的清单将是:

    red-apple-dog  
    blue-apple-cat  
    green-apple-mouse  
    

    为了便于阅读,我在数据中加入了破折号。实际数据可能包含破折号,也可能不包含破折号。

    如果我试试这个:

    /^(?!orange).*(apple).*/gm
    

    使用 https://regex101.com/ 它匹配所有行。

    使用 JavaScript RegEx excluding certain word/phrase? 为了获得灵感,我试着:

    /^(?!.*apple\.(?:orange|butter)).*apple\.\w+.*/gm
    

    如果有区别的话,我用的是Mozilla Rhino 1.7R4。

    1 回复  |  直到 8 年前
        1
  •  3
  •   CertainPerformance    8 年前

    对于每个字符 在里面 apple (之前 之后),你需要重复前面的消极展望 orange . 因为你不想 pineapple 为了匹配,您还应该在 苹果 :

    const re = /^((?!orange).)*\bapple\b((?!orange).)*$/;
    `green-pineapple-bird
    red-apple-dog  
    blue-apple-cat  
    green-apple-orange-horse  
    green-apple-mouse`
      .split('\n')
      .forEach(str => {
        console.log(re.test(str) + ' ' + str)
      });