给出以下数据
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。
答案 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)
});