[英]Greedy with a trailing greedy Regex in javascript
我試圖從Java語言的URL(http:/ abcom /?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:/abcom/?a=123&b=123") ))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.