按正则表达式分割得出“未定义”

时间:2013-05-23 16:48:53

标签: javascript regex

I have a code which提取查询字符串参数:

所以(例如)如果窗口网址是:

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

- 代码首先在split上使用&,然后在=上进行拆分

但是,有时我们会使用base64值,这些值可以有额外的韵母='s(填充)。

And here is where my code is messed up.

结果为N4JOJ7yZTi5urACYrKW5QQ,应为N4JOJ7yZTi5urACYrKW5QQ==

所以我将正则表达式提升为:

搜索 = - > there is no end there is no [=]

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

它确实有用。你可以在控制台上运行它

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

  • 为什么我未定义
  • 我怎样才能治愈我的正则表达式而只能屈服于["a", "N4JOJ7yZTi5urACYrKW5QQ=="]

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

3 个答案:

答案 0 :(得分:5)

这是因为您有其他匹配($|=)。您可以将其排除在与?:

的匹配之外
"a=N4JOJ7yZTi5urACYrKW5QQ==".split(/=(?!(?:$|=))/);

但是,您始终可以拼合匹配并移除额外的块:

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

答案 1 :(得分:5)

需要对网址进行编码

'a=N4JOJ7yZTi5urACYrKW5QQ=='

应该是

'a=N4JOJ7yZTi5urACYrKW5QQ%3D%3D'

查看encodeURIComponent()

如果你想使用reg表达式从值

获取密钥
> "abc=fooo".match(/([^=]+)=?(.*)?/);
  ["abc=fooo", "abc", "fooo"]

答案 2 :(得分:1)

为什么要使用拆分?一个正则表达式匹配有两个捕获,如/^(.+)=(.+)$/似乎更明显。