我试图从Javascript中的URL(http:/a.b.com/?a = 123)中的参数列表中获取“a =。*”。
/(.*[&|?])(a=.+?)(&.*)/.exec ("http:/a.b.com/?a=123&b=123")
给了我预期的和期望的:
["http:/a.b.com/?a=123&b=123", "http:/a.b.com/?", "a=123", "&b=123"]
但是,可能没有以下“& arg = val”并且我需要能够搜索可选的尾随“&。*”(因此在'&'之后添加'?'第三组。因此:
/(.*[&|?])(a=.+?)(&?.*)/.exec ("http:/a.b.com/?a=123&b=123")
让我意想不到:
["http:/a.b.com/?a=123&b=123", "http:/a.b.com/?", "a=1", "23&b=123"]
第二组现在在'='后只有1个字符,其余两个'23'是第三组的一部分..
我可能做错了什么?此外,欢迎以不同/更好的方式做任何建议。
非常感谢!
答案 0 :(得分:1)
您有两种可能性:
[&?]a=(.+?)(?:&|$)
[&?]a=([^&]+)
因此,要么非贪婪地匹配,直到遇到&
或字符串的结尾,或者贪婪地匹配除&
之外的所有字符。
此外,我缩短了您的正则表达式,并使该组仅捕获a
参数的值,而不是a=
部分。不需要.*
,您的正则表达式不必与整个字符串匹配,除非它与^
和/或$
相关联。而且角色类中的|
也是错误的。
测试用例示例:
alert(JSON.stringify(
/[&?]a=([^&]+)/.exec("http:/a.b.com/?a=123&b=123")
))