2017-02-15 8 views
0

URL照会ですべてのname=valueペアをregexとキャプチャしたいと思います。私はthisをしようとした場合同じキャプチャグループを複数回キャプチャするにはどうすればよいですか?

?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 

は、私はこのようなクエリを考えてみましょう^\?(?:([a-zA-Z0-9-_]+\=[a-zA-Z0-9-_]+)&?)*

このキャプチャ最後に出現するだけで、三番目のための例some=efsfsため。

しかし、私はしたいが、このようなキーと値のペアの配列です:

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

どのように私はキャプチャグループのすべての出現をキャプチャすることができますか?

PS:これは前に尋ねた蜂を持っていなければならないと思うが、私は何の疑問も見つけられないだろうが、言葉がわからないためかもしれない。これは、この方法で値を返す方法について

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

regex.exec(inputQuery); 

+1

参照[どうすればよいグラムJavaScriptのetクエリ文字列の値?](http://stackoverflow.com/questions/901115/how-can-i-get-query-values-in-javascript) –

+0

ありがとう、それは私の質問に答えることはありません、私はそれらを配列として必要とする、リンクされた質問の答えは私がパラメータの名前を知っていると仮定します。 – NoNameProvided

+0

答えは1つだけですか?その投稿を使って書いたhttps://jsfiddle.net/99k4szcn/を参照してください。より良い回答があるかもしれません。 –

答えて

1

["?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"] 

はEDIT: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('&'));

関連する問題