2017-02-15 69 views
0

我想在url查詢中使用正則表達式捕獲每個name=value對。如何捕獲同一個捕獲組多次?

可以說我有這樣的疑問:

?lm=1403085628 
?lm=1403085628&other=343323 
?lm=1403085628&other=&second=34342 
?lm=1403085628&=343243&second=34342 
?lm=1403085628&other=343323&some=efsfs 
? 
?lm=1403085628&other=343323&&&wrong 

如果我嘗試this^\?(?:([a-zA-Z0-9-_]+\=[a-zA-Z0-9-_]+)&?)*

這僅捕獲最後一次出現,例如some=efsfs的第三個。

但我要的是鍵值對的一個這樣的數組:

[ 
    'lm=1403085628', 
    'other=', 
    'second=34342' 
] 

我怎樣才能捕捉捕捉組中的所有事件?

PS:我想,這一定有蜜蜂問過,但我無法找到任何問題,但也許是因爲我不知道的措辭。

+1

見[我怎樣才能克等在JavaScript的查詢字符串值?(http://stackoverflow.com/questions/901115/how-can-i-get-query-string-values-in-javascript) –

+0

謝謝,但是那並沒有回答我的問題,我需要它們作爲數組,鏈接問題中的答案假定我知道參數的名稱。 – NoNameProvided

+0

只有一個答案嗎?見https://jsfiddle.net/99k4szcn/,只是用這個帖子寫的。可能有更好的答案。 –

回答

1

如何

var regex = /(?:[?&](.*?)=([^?&]+))/g 

regex.exec(inputQuery); 

這會以這種方式返回值:

["?lm=1403085628", "lm", "1403085628"] 

索引0的比賽中,1號是名稱和索引2的值。如果你這樣做在一個循環中,你可以同時捕獲名稱和值馬上

var result; 
var values = []; 
do { 
    values.push(result); 
} while(result = regex.exec(queryInput)) 

或者(無正則表達式,更高效的),你可以使用:

'?lm=1403085628&other=&second=34342'.slice(1).split('&') 
// Results in : ["lm=1403085628", "other=", "second=34342"] 

編輯:的jsfiddle演示片/拆分方法

console.log('?lm=1403085628'.slice(1).split('&')); 
 
console.log('?lm=1403085628&other=343323'.slice(1).split('&')); 
 
console.log('?lm=1403085628&other=&second=34342'.slice(1).split('&')); 
 
console.log('?lm=1403085628&=343243&second=34342'.slice(1).split('&')); 
 
console.log('?lm=1403085628&other=343323&some=efsfs'.slice(1).split('&')); 
 
console.log('?'.slice(1).split('&')); 
 
console.log('?lm=1403085628&other=343323&&&wrong'.slice(1).split('&'));