2016-10-11 36 views
0

如何在下面的$ regex對象中獲得引號。刪除mongo正則表達式中的引號

{ '$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

這個單詞「$ regex」只需要在$或'鍵和你提到的特定對象中被替換嗎?或者是否要刪除整個對象中的引號?無論「$ regex」出現在哪裏? –

+0

最好在任何地方,如果有一個簡單的方法來做到這一點。 – Mika

回答

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,這將解釋這個正則表達式是如何工作的,也可以作爲一個操場來讓你進一步擴充這個正則表達式來滿足你的需求。

相關問題