javascript - 正则表达式匹配包含“apple”但不匹配同一字符串中的“orange”的字符串
问题描述
鉴于以下数据
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 排除某些单词/短语?为了获得灵感,我尝试了:
/^(?!.*apple\.(?:orange|butter)).*apple\.\w+.*/gm
如果它有所作为,我正在使用 Mozilla Rhino 1.7R4。
解决方案
对于不在apple
(之前或之后)中的每个字符,您需要对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)
});
推荐阅读
- elasticsearch - 从 Elasticsearch 中同步删除文档
- python - 如何在基于 Alpine 图像的 dockerized 应用程序中启用 WebSocket 连接(WebSocketAddressException:[Errno -3])?
- java - 无法自动接线。找不到“int”类型的 bean
- java - 每像素字节数,每行字节数 - 如何在 tess-two 的 tessbaseapi.cpp 中使用函数 nativeSetImageBytes?
- java - Don't know the simplest way to display my matrix in a column, keeps displaying in one row
- c++ - 在 stl 排序算法中未调用自定义交换函数
- elasticsearch - 使用 ElasticSeach 搜索字符串的一部分
- orientdb - 尝试连接到本地 orientdb 数据库时,“配置文件格式无效”
- mongodb - MongoDB 对匹配所有值的电子邮件地址进行全文搜索,并可能修复花费太多时间
- java - 使用 Java 格式文本创建 Excel