繁体   English   中英

按正则表达式拆分“未定义”

[英]Split by regex yield “undefined”

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

因此(例如),如果窗口网址为:

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

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

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

这是我的代码混乱的地方。

结果为N4JOJ7yZTi5urACYrKW5QQ ,应为N4JOJ7yZTi5urACYrKW5QQ==

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

搜索 =这样, 之后 ->there is no end there is no [=]

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

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

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

  • 为什么我变得不确定
  • 我该如何治愈我的正则表达式,使其仅产生["a", "N4JOJ7yZTi5urACYrKW5QQ=="]

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

发生这种情况是因为您还有其他匹配项($|=) 您可以将其排除在与?:匹配之外:

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

但是,您始终可以使匹配变平并删除多余的块:

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

网址需要编码

'a=N4JOJ7yZTi5urACYrKW5QQ=='

应该

'a=N4JOJ7yZTi5urACYrKW5QQ%3D%3D'

看一下encodeURIComponent()

如果要使用reg表达式从值中获取密钥

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM