[英]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.