Javascript 在mongodb中,如何将正则表达式应用于要查询的数据库中的值?
下面是一个场景,您将电话号码作为字符串存储在mongo中。值可以是以下任意值:Javascript 在mongodb中,如何将正则表达式应用于要查询的数据库中的值?,javascript,node.js,regex,mongodb,Javascript,Node.js,Regex,Mongodb,下面是一个场景,您将电话号码作为字符串存储在mongo中。值可以是以下任意值: 987-654-3210 9876543210 (978)654-3210 所有这些数字都是一样的。我想使用一个RegExp进行搜索,它基本上会去掉所有非字母数字字符的值。使用987-654-3210搜索将返回9876543210,但仅此而已。我希望找到一个解决方案,将正则表达式应用于数据库中存储的内容,以匹配我在查询中传递的正则表达式 最后,如果这三个电话号码都在数据库中,并且用户使用这三个号码中的任何一个进行
- 987-654-3210
- 9876543210
- (978)654-3210
最后,如果这三个电话号码都在数据库中,并且用户使用这三个号码中的任何一个进行搜索,则应返回这三个号码。您可以使用这三个正则表达式来提取3个预期组(在您的示例中为
987
、654
和3210
):
- XXX-XXX-XXXX:
/(\d{3})-(d{3})-(d{4})/g
- XXXXXXXXX:
/(\d{3})(\d{3})(\d{4})/g
- (三十) XXX-XXXX:
/\(\d{3})\ \s(\d{3})-(\d{4})/g
查找与这三种格式中的任何一种匹配的所有文档:
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中尝试它为了澄清,我理解如何将搜索值替换为仅为数字,但是比较仅为数字的值将与数据库中包含破折号和括号的值不匹配。挑战在于能够匹配数据库中的3个值。这将帮助我开始,但我最终希望能够将模式应用于数据库中已有的内容,以便如果他们使用句点而不是破折号或类似的东西,我能够找到更多的模式。但也许仅仅限制数据在数据库中的存储方式就有助于搜索。