2015-03-19 90 views
1

我想找到聚合()和find()之間的任何字符串。以下是我的代碼。模式匹配以獲得括號內的字符串

var str1 = 'aggregate([{$group:{_id:{state:"$state",city:"$city"},sum:{$sum:"$pop"}}},{$sort:{sum:1}},{$group:{_id:"$_id.state",smallestcity:{$first:"$_id.city"},smallest:{$first:"$sum"},largestcity:{$last:"$_id.city"},largest:{$last:"$sum"}}}])' 
var str2 = 'find({awards:{$elemMatch:{award:"Turing Award",year:{$gt:1980}}}}).limit(0)' 

var matchPharse = /((.*))/; 
var result = str1.match(matchPharse); 
console.log(result); 

我得到的結果總是整個字符串,而不是

[{$group:{_id:{state:"$state",city:"$city"},sum:{$sum:"$pop"}}},{$sort:{sum:1}},{$group:{_id:"$_id.state",smallestcity:{$first:"$_id.city"},smallest:{$first:"$sum"},largestcity:{$last:"$_id.city"},largest:{$last:"$sum"}}}] 

I am searching for something like this

+0

@AvinashRaj我覺得OP貼預期輸出後「而不是」 – bozdoz 2015-03-19 07:35:46

回答

1

嘗試這種模式,而不是:

var matchPharse = /((\[.*\]))/; 
0

你只需要逃避外界括號。嘗試:

var matchPharse = /\((.*)\)/; 

對於剛剛裏面的內容括號使用result[1]

+0

將包括括號 – mish 2015-03-19 07:34:38

+0

查看更新@mish – bozdoz 2015-03-19 07:35:09

1
((\[.*?\])) 

你應該使用non greedy表達。

1

試試下面的正則表達式:

var matchPharse= /\((.*)\)/g; 

匹配()之間的任意序列。

這是一個DEMO

var str1 = 'aggregate([{$group:{_id:{state:"$state",city:"$city"},sum:{$sum:"$pop"}}},{$sort:{sum:1}},{$group:{_id:"$_id.state",smallestcity:{$first:"$_id.city"},smallest:{$first:"$sum"},largestcity:{$last:"$_id.city"},largest:{$last:"$sum"}}}])' 
 
var str2 = 'find({awards:{$elemMatch:{award:"Turing Award",year:{$gt:1980}}}}).limit(0)' 
 
var matchPharse = /\((.*)\)/; 
 
var result = str1.match(matchPharse); 
 
alert(result);

+0

請糾正我,如果我做錯了什麼在下面分裂。 Im split split on, var str ='{「a」:2000,「b」:「sam」},{「c」:1,「d」:1}' var res = str.split(/( ?:\} \,| \,\ {)/);控制檯日誌(res [1])//'{「c」:「#」 :1,「d」:1} 期待輸出 res [0] = {「a」:2000,「b」:「sam」} – user4324324 2015-03-19 12:27:47

+0

如果您使用split()}}計入分割的字符串中。 – 2015-03-19 13:35:34

相關問題