2016-11-05 6 views
0

URL照会パラメータを正規表現を使用してインテリジェントに解析したいと思います。 ?」のparam1 = test1の& PARAM2 = TEST2 & PARM3 =: 1)のparamsは唯一の特定のparamsはregexを使用してURLクエリパラメータを解析する

は、クエリ文字列を考えると一致しなければならないため 2)の外になります

物事は私が検討していたですtest3 " javascript regexを実行してparam1の値とparam3の値を解析したいとします。

私がこれまでに作ってみたの正規表現は次のとおりです。

/(?:[?&](?:param1=([^&]*)|param3=([^&]*)|[^&]*))+$/g 

この正規表現はhttps://regex101.com/ようなサイトに私のために正常に動作するようです。

しかし、以下のJSメソッドを実行すると、param1の値を解析する必要がある$ 2の値が常に不定になります。助けや提案?

"?param1=test1&param2=test2&param3=test3".replace(
/(?:[?&](?:param1=([^&]*)|param3=([^&]*)|[^&]*))+$/g, 
function ($0, $1, $2, $3) { return $0 + ' ' + $1 + ' ' + $2 + ' ' + $3; }); 

これは$ 2を未定義として、$ 3をtest3として返します。しかし、urlクエリ文字列からparam2とparam3の両方を除外すると、param1を$ 2として解析できます。それについて少し混乱している。

ありがとうございました!

+0

javascriptタグで追加 – prasanth

+0

あなたの交換の予想される出力は? – Damon

+0

$ 1と$ 1を出力して 'test1'と 'test3'を出力したいのですが、実際にはjavascriptの制限があります:http://stackoverflow.com/questions/3537878/how-to-capture-an-arbitrary-number-of -groups-in-javascript-regexp –

答えて

0

任意の順序であれば、lookaheadsを使用してそれらを検索し、パラメータ値を取得できます。パラメータ/値のペアかのいずれかで、それぞれの先読み交互ので、それはまた、パラメータが欠落しているクエリ文字列を受け入れるだろう

^(?=.*param1=([^&]+)|)(?=.*param2=([^&]+)|)(?=.*param3=([^&]+)|).+$ 

Demo on Regex101

:あなたは(あなたのテスト文字列のために)したいパターンがこれです最後に|を使用して空の文字列を返します。

取得したいパラメータごとに別の先読みが必要です。これを回避する方法はありません。太陽の下のすべての正規表現はフードの下でstate machineなので、元のパターンを使用するために掛かっているのは、特定のキャプチャグループの最新のマッチです。

関連する問題