MongoDB正则表达式不工作
问题描述:
我试图返回其obsNum字段以1.
开头的文档。我写了下面的正则表达式但是过滤掉这些文件,它返回所有以1
MongoDB正则表达式不工作
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`
答
'^\s*1\.'
是字符串。移除后缀转义之后的正则表达式将是^s*1.
,这意味着字符串应该以任意数量的空格/ s开始,然后是1,然后是任何字符。
您可以使用正则表达式的文字语法
$regex: /^\s*1\./
或双反斜线逃逸
$regex: '^\\s*1\\.'
我建议使用文本语法只要有可能,因为它是容易的,不易出错。
+0
感谢您的惊人答案! – user2498079
答
正则表达式,你可以尝试是:
^(1\.\d+)
说明:
-
^
开始字符串 -
(…)
捕获括号:记得比赛 -
1
文字位数 -
\d
十进制数字 -
+
至少一个
您正在将正则表达式作为字符串传递,因此反斜杠需要双重转义。使用'$正则表达式:/^\ s * 1 \ ./' – Tushar
@Tushar你是绝对正确的。这是我的正则表达式唯一的问题。你能告诉我为什么我们需要在正则表达式字符串中加双反斜杠? – user2498079
因为在字符串中,反斜杠用于转义下面的字符。因此,正则表达式中的一个用于转义,另一个用于元字符。或者简单地使用第一条评论中显示的regex文字语法。 – Tushar