4

我有一个提取查询字符串参数的代码:

所以(例如)如果窗口 url 是:

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

--代码先用spliton &,再split on=

但是,有时我们使用 base64 值,它可以有额外的结尾='s(填充)。

这就是我的代码搞砸的地方。

结果是N4JOJ7yZTi5urACYrKW5QQ而且应该是N4JOJ7yZTi5urACYrKW5QQ==

所以我将我的正则表达式增强为:

在它=之后搜索- > ( there is no end OR there is no [=] )

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

它确实有效。您可以在控制台上运行它

但结果是["a", undefined, "N4JOJ7yZTi5urACYrKW5QQ=="]

  • 为什么我变得不确定
  • 我怎样才能治愈我的正则表达式只产生["a", "N4JOJ7yZTi5urACYrKW5QQ=="]

ps 我知道我可以将所有 finals 替换=为临时的,然后将其替换回来,但是这个标签被标记为正则表达式。所以我正在寻找一种方法来修复我的正则表达式。

4

3 回答 3

5

发生这种情况是因为您有额外的 match ($|=)。您可以将其从匹配中排除?:

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

但是,您始终可以展平该匹配并删除额外的块:

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

url需要编码

'a=N4JOJ7yZTi5urACYrKW5QQ=='

应该

'a=N4JOJ7yZTi5urACYrKW5QQ%3D%3D'

调查encodeURIComponent()

如果您想使用 reg 表达式从值中获取键

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

为什么必须使用拆分?带有两个捕获的正则表达式匹配/^(.+)=(.+)$/,看起来更明显。

于 2013-05-23T17:09:15.227 回答