使用正则表达式比较mongodb中的车辆编号

时间:2017-01-30 11:21:43

标签: javascript node.js mongodb

我有一个场景,我想比较数据库中的车辆编号。 如果输入的数字是 KA03ME0101 ,我将只获取第3个第4个和第7个数字,直到字符串中的最后一个元素,并在数据库中进行比较,我想要应用正则表达式对数字执行相同的操作并比较一下。 现在我将它存储为String。

   vehicle_number : {
   type : String
    },

这个查询现在为我做了

    bookingSchema.statics.findBookingByVehicleNo = function(params, callback){
    return this.findOne({
        '$and' : [
            { 'booking_status' : { '$eq' : 'checked_in' }},
            { 'vehicle_number' : params.vehicle_number   }
        ]
    }).exec(callback);
}

假设车辆没有`KA03ME0101 ,我想写一个查询,在那里我只能比较不包括 KA ME的数字并仅选取 030101 的数字。 所以跳过前两个单词,然后拿起第3个和第4个数字然后跳过第5个和第6个并取出剩下的数字。 从用户方面,我将以相同的方式获取数字,然后进行比较。 我如何应用正则表达式来执行此操作任何导致都会有所帮助。

2 个答案:

答案 0 :(得分:1)

您可以在此处使用正则表达式:http://regexr.com/

对于您的情况,您只想查看数字,所以只需删除非数字并进行比较即可:



var plates = [
  'KA03ME0101',
  'AK03EM0101'
];
var regularExpression = /\D/ig;
for (var indexA = 0; indexA < plates.length; indexA++) {
  var a = plates[indexA];
  for (var indexB = indexA + 1; indexB < plates.length; indexB++) {
    var b = plates[indexB];
    if (a.replace(regularExpression, '') == b.replace(regularExpression, '')) {
      console.log(a, 'matches', b);
    }
  }
}
&#13;
&#13;
&#13;

答案 1 :(得分:1)

您可以简单地从参数中提取数字并使用它进行查询。 因此,在您的示例中,params.vehicle_number.match(/\d+/g).join('')会为您提供030101。所以你的查询应该如下:

'$and' : [
            { 'booking_status' : { '$eq' : 'checked_in' }},
            { 'vehicle_number' :params.vehicle_number.match(/\d+/g).join('')   }
        ]