贪婪带有javascript中的尾随贪婪Regex
Greedy with a trailing greedy Regex in javascript
我正试图用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",我需要能够搜索可选的尾部"&.*"(因此在第三组的"&aamp;"后面添加"?"。因此:
/(.*[&|?])(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=([^&]+)
因此,要么非贪婪地匹配,直到遇到&
或字符串末尾,要么贪婪地匹配除&
之外的所有字符。
此外,我缩短了regex,并使组只捕获a
参数的值,而不捕获a=
部分。不需要.*
,除非使用^
和/或$
进行锚定,否则正则表达式不必匹配整个字符串。字符类中的|
也是错误的。
测试用例示例:
alert(JSON.stringify(
/[&?]a=([^&]+)/.exec("http:/a.b.com/?a=123&b=123")
))
相关文章:
- RegEx删除空属性?例如,如果(class=“”||class=“”)移除;否则就下课
- Regex代码只允许一个空格
- Regex匹配除“”之外的所有字符;.js”;
- RegExp:匹配Javascript中除regex值之外的所有内容
- Javascript RegEx validator
- 使用regex的jquery keydown绑定不会验证撇号和句点
- 制作一个regex来验证只有一个数字的字符串
- RegEx JavaScript:数字后的符号提取
- PHP和Javascript之间的Regex差异
- 链接和youtube的Javascript和regex
- 包含圆括号的JavaScript Regex模式
- 相当复杂的Regex
- 如何在ng regex中包含qutoes+双引号
- 在javascript中,I'我很难弄清楚如何让regex只替换捕获而不替换匹配
- Regex提取URL返回数组的一部分;未定义”;
- 将po-box javascript正则表达式转换为c#regex
- Datatables查询url字符串:需要regex来修复url解析
- 贪婪带有javascript中的尾随贪婪Regex
- Regex略微贪婪捕获
- Regex在标签之间匹配文本太贪婪了