簡體   English   中英

帶有貪婪的正則表達式的貪婪正則表達式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM