[問題] javascript大全中的"非貪進重複"

看板Ajax作者 (阿湯)時間10年前 (2014/05/05 20:01), 編輯推噓1(109)
留言10則, 4人參與, 最新討論串1/1
1.此方式會匹配字元進可能少次的出現,如/a+?/套用至字串"aaa",僅匹配第一個字母a 2.但非貪進版/a+?b/會和貪進版的/a+b/套用至字串"aaab",皆匹配整個字串 為什麼2會出現這樣的結果,我看javascript大全的第255頁的解釋是"因為正規運算式範 式比對的方式是找出字串中第一個可能出現匹配的位置,既然在這個字串中第一個字元 處就有可能出現匹配,它就不會考慮在這個字元後可能出現的更短匹配 " 我實在看不懂它在寫甚麼,在內文中說的"既然在這個字串中第一個字元處就有可能出現 匹配,它就不會考慮在這個字元後可能出現的更短匹配",那這樣說的話 /a+?/套用至字串"aaa",不是也應該aaa而不是匹配第一個字母a 希望看得懂"javascript大全",這段在寫甚麼的可以告訴我.... -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 106.1.62.253 ※ 文章網址: http://www.ptt.cc/bbs/Ajax/M.1399291293.A.A8B.html

05/05 20:03, , 1F
此段是關於javascript的正規運算式
05/05 20:03, 1F

05/05 20:25, , 2F
換句話說,a+? 如果已經得到 match,就不會繼續吃字串
05/05 20:25, 2F

05/05 21:03, , 3F
不會考慮後面"更長"的匹配吧
05/05 21:03, 3F

05/05 21:51, , 4F
書上寫的是"更短"
05/05 21:51, 4F

05/05 21:56, , 5F
而且書中寫/a+?b/套用至aaab是匹配整個字串
05/05 21:56, 5F

05/05 21:56, , 6F
不是我以為的ab
05/05 21:56, 6F

05/05 22:14, , 7F
他的解釋是針對 a+?b,第一個 match 是 aaab,因為要
05/05 22:14, 7F

05/05 22:15, , 8F
從前面讀過來啊,所以當然不會只配 ab
05/05 22:15, 8F

05/06 06:25, , 9F
因為 regex 是從前面往後讀,他不會回頭判斷是不是可以更短
05/06 06:25, 9F

05/06 10:54, , 10F
超感謝你們...我看懂了
05/06 10:54, 10F
文章代碼(AID): #1JPtsTgB (Ajax)