从mongo正则表达式中删除引号

时间:2016-10-11 11:01:51

标签: javascript mongodb

如何获取下面$ regex对象中的引号。

 { '$or': 
    [ '{"last":{"$regex":"/.*Pat.*/"}}',
      '{"first":{"$regex":"/.*Pat.*/"}}' ],
      thing: 57b713625bf9b85ca824de8c }

下面是我采用的方法,但必须有更好的方法,它不起作用,因为我无法弄清楚如何将表达式作为对象的值。

for (var key in req.query) {
if (req.query.hasOwnProperty(key)) {
  if (key === '$or') {
    for (var item in req.query[key]) {
      if (req.query[key].hasOwnProperty(item)) {
        req.query[key][item] = JSON.parse(req.query[key][item]);
        for (var x in req.query[key][item]) {
         for (var thereMustBeABetterWayToDoThis in req.query[key][item][x]){
           req.query[key][item][x][thereMustBeABetterWayToDoThis] = req.query[key][item][x][thereMustBeABetterWayToDoThis].replace(/["']/g, "");
         }
        }
      }
    }
  }
}

1 个答案:

答案 0 :(得分:1)

由于您希望全局替换"$regex"$regex删除"。我认为一种更简单的方法可以是对JSON进行字符串化,然后进行正则表达式替换,然后再次解析JSON。我说简单,因为我不能确认它在性能或时间方面是最有效的。

举个例子:

var test = { '$or': 
[ '{"last":{"$regex":"/.*Pat.*/"}}',
  '{"first":{"$regex":"/.*Pat.*/"}}' ],
  thing: 57 }
var test_string = JSON.stringify(test); //Convert it into a string.

var re = /\\"\$regex\\"/g;
var output = test_string.replace(re,"$regex"); //Do a simple replace 

var outputObj = JSON.parse(output); //Parse the object.

//So now you'd want to work with the outputObj

关键是这个正则表达式 - \\"\$regex\\"。我已经创建了一个基本的demo来解释这个正则表达式是如何工作的,也可以作为一个操场,让你进一步扩展这个正则表达式以满足你的需要。