RegExp匹配包含“ apple”但不匹配“ orange”的字符串

时间:2018-07-19 00:53:07

标签: javascript regex regex-negation regex-group

给出以下数据

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

我试图弄清楚如何获取(Javascript)RegExp.test()来匹配包含“ apple”一词的任何条目(任何地方),但不匹配包含单词“ orange”的任何条目(任何地方) 。结果列表将是:

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 个答案:

答案 0 :(得分:3)

对于apple中的每个字符 not (在之前或之后的),您需要为orange重复负向查找。因为您不希望pineapple匹配,所以还应该在apple周围加上单词边界:

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)
  });