如何获取下面$ 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, "");
}
}
}
}
}
}
答案 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来解释这个正则表达式是如何工作的,也可以作为一个操场,让你进一步扩展这个正则表达式以满足你的需要。