REGEX号不在列表中,但没有长列表

时间:2017-09-29 20:54:05

标签: regex

我有一个以下数字的列表,想要一个正则表达式,当数字不在列表中时匹配​​。

  

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模拟器上测试这个。

2 个答案:

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

enter image description here

不确定您使用的是什么正则表达式引擎,但在这里我使用java创建了一个示例: https://ideone.com/B7kLe0