javascript - Mongodb 字符串匹配正则表达式

标签 javascript regex mongodb

我有一些 mongodb 文档,如下所示:

{
    ...
    ipAddress: "1.2.3.4"
},
{
    ...
    ipAddress: "1.2.3.44,1.2.5.7"
}

ipAddress 是一个字符串字段,可以包含许多用逗号分隔的 IP。 (“1.2.3.4,1.3.5.7,2.4.6.8”等)

我想检索与特定 IP 匹配的 mongo 文档。为此,我尝试以下查询:

collection.findOne({
    ipAddress: new RegExp (<<the_ip>>)
});

但是,在调试我的应用程序时,我意识到上述查询匹配并找到任何具有 the_ip 的内容,而不仅仅是确切的 the_ip

例如。 如果我有两个 IP 分别为 1.2.2.2 和 1.2.2.22 的文档,并且我搜索正则表达式 1.2.2.2,我注意到它总是匹配并返回 1.2.2.22。我觉得这是预料之中的,因为从技术上讲,正则表达式正在完成它的工作。

但这并不是我们想要的结果。如何进行完整的精确 IP 匹配?

谢谢。

最佳答案

我认为你需要做两件事:

  1. 向 IP 地址添加分隔符
  2. 地址中的转义点

对于(1)做:

(^|,)<<the_ip>>(,|$)

这要求 IP 前面是字符串开头的 (^) 断言或逗号,并且 IP 后面是逗号或 ($ ) 字符串末尾的断言。

对于 (2),用 IP 字符串中的 \. 替换点。

"1.2.3.4".replace(/\./g, "\\.")

正则表达式中的点表示“除换行之外的任何字符”,因此如果不替换它,可能会意外匹配一些无效字符串(例如1a1a1a1)。

Demo

关于javascript - Mongodb 字符串匹配正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48947975/

相关文章:

regex - 在匹配后向字符串添加大括号 (sed)

javascript - 保存或更新 Mongoose

android - 获取android中html的所有元素和值

node.js - Mongoose.js 检查所有字段以匹配字符串

c# - 如何在 C# mongo 驱动程序中设置复数集合名称?

javascript - html css 或 php gd 库两个图像合并 Angular 到 Angular

javascript - Knockout JS - 多维 observableArrays 和显示子数组数据

javascript - 改变颜色选择器不改变 Canvas 背景颜色

javascript - 如何在没有 node.js/npm 的情况下在本地使用 Angular2、systemjs?

java - java regex 如何查找和替换