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。
我知道我可以将所有决赛=
替换为临时的,然后将其替换回来
但是这个标签被标记为正则表达式。所以我正在寻找一种方法来修复我的正则表达式。
答案 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)
为什么要使用拆分?一个正则表达式匹配有两个捕获,如/^(.+)=(.+)$/
似乎更明显。