我正在尝试从 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”是第三组的一部分。
我可能做错了什么?也欢迎任何以不同/更好的方式做到这一点的建议。
提前非常感谢!
最佳答案
你有两种可能性:
[&?]a=(.+?)(?:&|$)
[&?]a=([^&]+)
因此,要么非贪婪匹配,直到遇到 &
或字符串末尾,要么贪婪匹配除 &
之外的所有字符。
此外,我还缩短了您的正则表达式,并使该组仅捕获 a
参数的值,而不捕获 a=
部分。不需要 .*
,您的正则表达式不必匹配整个字符串,除非它使用 ^
和/或 $
锚定。而且字符类中的 |
也是错误的。
测试用例示例:
alert(JSON.stringify(
/[&?]a=([^&]+)/.exec("http:/a.b.com/?a=123&b=123")
))
关于javascript - 贪婪与 JavaScript 中的尾随贪婪正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26319530/