MongoDB正则表达式不工作

MongoDB正则表达式不工作

问题描述:

我试图返回其obsNum字段以1.开头的文档。我写了下面的正则表达式但是过滤掉这些文件,它返回所有以1MongoDB正则表达式不工作

Observations.getObservationsModelObject().find({ 
    "ageGroup": ageGroup, 
    "obsNum": { 
     $regex: '^\s*1\.' 
    } 
}, function(err, foundData) {}); 

开始我在做什么错的文件?

这个表达式'^\s*1\.'是返回以下而不是返回上1.3,1.1 & 1.2:

obsNum: 1.3 
obsNum: 1.1 
obsNum: 1.2 
obsNum: 123 
obsNum: 121` 
+1

您正在将正则表达式作为字符串传递,因此反斜杠需要双重转义。使用'$正则表达式:/^\ s * 1 \ ./' – Tushar

+0

@Tushar你是绝对正确的。这是我的正则表达式唯一的问题。你能告诉我为什么我们需要在正则表达式字符串中加双反斜杠? – user2498079

+0

因为在字符串中,反斜杠用于转义下面的字符。因此,正则表达式中的一个用于转义,另一个用于元字符。或者简单地使用第一条评论中显示的regex文字语法。 – Tushar

'^\s*1\.'字符串。移除后缀转义之后的正则表达式将是^s*1.,这意味着字符串应该以任意数量的空格/ s开始,然后是1,然后是任何字符。

您可以使用正则表达式的文字语法

$regex: /^\s*1\./ 

或双反斜线逃逸

$regex: '^\\s*1\\.' 

我建议使用文本语法只要有可能,因为它是容易的,不易出错。

+0

感谢您的惊人答案! – user2498079

正则表达式,你可以尝试是:

^(1\.\d+) 

说明:

  • ^开始字符串
  • (…)捕获括号:记得比赛
  • 1文字位数
  • \d十进制数字
  • +至少一个