我有一个以下数字的列表,想要一个正则表达式,当数字不在列表中时匹配。
0,1,2,3,4,9,11,12,13,14,15,16,18,19,250
我写了以下REGEX语句。
router.get("/", function(req, res, next) {
db.collection("samplecollection", function(err, collection){
collection.find({}).limit(10).toArray(function(err, data){
res.json(data);
})
});
});
问题在于它正确地给出了5,6,7,8等的匹配,但不是例如17或251。
我一直在在线REGEX模拟器上测试这个。
答案 0 :(得分:0)
这可以解决您的问题..
^(?!\D*(0|1|2|3|4|9|11|12|13|14|15|16|18|19|250)\b).*$
在您之前的正则表达式中,您基本上是要删除所有以0/1/2/3/4/9开头的数字!
因此,您的原始正则表达式实际上与54/623/71/88匹配,但与其他正则表达不匹配。此外,列表中的11-19和250也变得毫无用处。
虽然和其他人一样,我也建议你不要使用正则表达式,因为我认为这是一种过度杀伤和维护的噩梦!
另外一个额外的注意事项“可变长度看起来也非常低效”,而不是常规检查。
我会\b\d+\b
获取字符串中的每个数字,并检查它们是否在您的列表中。它会更快。
答案 1 :(得分:0)
您可以使用丢弃技术匹配您不想要的内容并捕获您真正想要的内容。
你可以使用这样的正则表达式:
\b(?:[0-49]|1[1-689]|250)\b|(\d+)
在这里,您可以查看工作演示,其中蓝色表示匹配(您不想要的),绿色表示您想要的内容。然后你必须从捕获组中获取内容
<强> Working demo 强>
不确定您使用的是什么正则表达式引擎,但在这里我使用java创建了一个示例: https://ideone.com/B7kLe0