javascript - 贪婪与 JavaScript 中的尾随贪婪正则表达式

标签 javascript regex regex-greedy

我正在尝试从 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/

相关文章:

javascript - 将图像数组添加到弹出窗口

Javascript 如何手动启动 Star Promise Chain 执行

regex - 保留以正则表达式过滤的文本中的回车

c# 正则表达式匹配太慷慨

python - python 正则表达式中的可选组

javascript - 使用 jQuery Ajax 和 Mysql 生成 HTML

javascript - 如何在android中等待javascript的返回值并继续

python - python中的正则表达式搜索if条件

regex - 。+之间有区别(如果有)。和。*

regex - 正向后视贪婪