4

クエリ文字列パラメーターを抽出するコードがあります:

したがって (たとえば) ウィンドウの URL が次の場合:

....&a=1&.....

-- コードは最初splitに on&を使用してから、=

ただし、base64 値を使用する場合があり、追加の最終値='s(パディング) を持つことができます。

そして、ここで私のコードが台無しになっています。

結果はN4JOJ7yZTi5urACYrKW5QQあり、そうあるべきですN4JOJ7yZTi5urACYrKW5QQ==

したがって、正規表現を次のように拡張します。

それ以降=のように検索-> (または)there is no end there is no [=]

'a=N4JOJ7yZTi5urACYrKW5QQ=='.split(/\=(?!($|=))/)

それは機能します。コンソールで実行できます

しかし、結果は["a", undefined, "N4JOJ7yZTi5urACYrKW5QQ=="]

  • なぜ未定義になるのですか
  • 降伏のみの正規表現を修正するにはどうすればよいですか["a", "N4JOJ7yZTi5urACYrKW5QQ=="]

psすべての finals=を一時的なものに置き換えてから元に戻すことができることはわかっていますが、このタグは正規表現としてタグ付けされています。だから私の正規表現を修正する方法を探しています。

4

3 に答える 3

5

URL はエンコードする必要があります

'a=N4JOJ7yZTi5urACYrKW5QQ=='

する必要があります

'a=N4JOJ7yZTi5urACYrKW5QQ%3D%3D'

調べるencodeURIComponent()

また、reg 式を使用して値からキーを取得する場合は、

> "abc=fooo".match(/([^=]+)=?(.*)?/);
  ["abc=fooo", "abc", "fooo"]
于 2013-05-23T16:52:50.333 に答える
5

これは、追加の match があるために発生します($|=)。とのマッチングから除外できます?::

"a=N4JOJ7yZTi5urACYrKW5QQ==".split(/=(?!(?:$|=))/);

ただし、その一致をいつでも平坦化し、余分なブロックを削除できます。

"a=N4JOJ7yZTi5urACYrKW5QQ==".split(/=(?!$|=)/);
于 2013-05-23T16:52:22.843 に答える
1

なぜ分割を使用する必要があるのですか?より明白に見えるように、2 つのキャプチャを含む正規表現の一致。/^(.+)=(.+)$/

于 2013-05-23T17:09:15.227 に答える