javascript - 您如何将正则表达式应用于数据库中的值以在 mongodb 中查询?

标签 javascript node.js regex mongodb

场景如下,您将电话号码作为字符串存储在 mongo 中。值可以是以下任何一项:

  • 987-654-3210
  • 9876543210
  • (978) 654-3210

所有这些数字都是相同的。我想使用 RegExp 进行搜索,它基本上会去除所有非字母数字字符的值。使用 987-654-3210 搜索将返回 9876543210,仅此而已。我希望找到一个解决方案,将正则表达式应用于数据库中存储的内容,以匹配我在查询中传递的正则表达式。

最终,如果所有这三个电话号码都在数据库中并且用户使用这三个中的任何一个进行搜索,则应返回所有三个。

最佳答案

您可以使用这 3 个正则表达式来提取 3 个预期组(在您的示例中 9876543210):

  • XXX-XXX-XXXX : /(\d{3})-(\d{3})-(\d{4})/g
  • XXXXXXXXX : /(\d{3})(\d{3})(\d{4})/g
  • (XXX) XXX-XXXX : /\((\d{3})\)\s(\d{3})-(\d{4})/g<

想法是根据您的输入生成这 3 个组,并从这些组生成三种格式以查找所有匹配这三种格式中的任何一种的文档:

var input = "987-654-3210"; // or any of the 3 formats

var regex = [];
regex[0] = /(\d{3})-(\d{3})-(\d{4})/g;      // 987-654-3210
regex[1] = /(\d{3})(\d{3})(\d{4})/g;        // 9876543210
regex[2] = /\((\d{3})\)\s(\d{3})-(\d{4})/g; // (978) 654-3210

function getPhoneNumber(phoneNumber) {
    for (key in regex) {
        var match = regex[key].exec(phoneNumber);
        if (match) {
            return match;
        }
    }
}

var group = getPhoneNumber(input);

var filter = [];
filter[0] = group[1] + "-" + group[2] + "-" + group[3];
filter[1] = group[1] + group[2] + group[3];
filter[2] = "(" + group[1] + ") " + group[2] + "-" + group[3];

db.data.find({
    "phoneNumber": {
        "$in": filter
    }
})

可以直接在mongodb shell中试试

关于javascript - 您如何将正则表达式应用于数据库中的值以在 mongodb 中查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43667593/

相关文章:

javascript - iPhone/iOS - [NSBundle mainBundle] pathForResources 无法查看 Javascript 文件

javascript - 仅加载所需的 javascript 和 css

javascript - 在javascript中双击时获取按下的键

javascript - 如何在用作nodejs服务器响应的html文件中包含外部脚本

regex - 用于a-z,0-9,的正则表达式。和 -

java - 读取文件时如何返回正数和负数

javascript - 使用javascript计算下载时间

javascript - 来自nodeJS脚本的python shell向nodejs返回相同的值

node.js - MongoError : Mod on _id not allowed

css - 我怎样才能使这种情况与正则表达式匹配?