[心得] RegExp object :)

看板Ajax作者 (葉酸酸)時間13年前 (2011/03/12 21:18), 編輯推噓5(501)
留言6則, 6人參與, 最新討論串1/1
javascript:(function() { var regex_g = /^\d{4}$/g; var src = ["1234", "3456", "5678", "7890"]; var dest_g = []; var cx; for (cx = 0; cx < src.length; cx++) if ( regex_g.test(src[cx]) ) dest_g.push(src[cx]); return dest_g; })(); 以上傳回的結果是 ["1234", "5678"],不信可以試試看。XD 原因出在 RegExp object 的 lastIndex property, 每次 call RegExp object 的 exec() 與 test() methods 時, 都會去找 lastIndex,然後從 lastIndex 開始往後找。 如果沒有 g flag,那麼每次跑完 exec() 跟 test() 都會把 lastIndex 歸零。 但如果有 g flag,就不一定會做這件事情。 cx lastIndex 跑完 test() return lastIndex 設為 0 0 true 4 1 4 false 0 2 0 true 4 3 4 false 0 一般用 exec() 的時候會比較注意這件事情,提醒一下大家 test() 也有這種特性。XD 如果想要預期的結果,就是把 g flag 拿掉。 -- Oni devas ami animalojn. Ili estas tiel bongustaj. One should love animals. They are so tasty. 每個人都應該愛動物,他們是如此美味。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.204.147.167

03/13 02:07, , 1F
推。XD
03/13 02:07, 1F

03/13 19:29, , 2F
樓上沒推到XD
03/13 19:29, 2F

03/13 19:56, , 3F
那就只好幫他補推了 XD
03/13 19:56, 3F

03/13 23:17, , 4F
推 前幾天也遇到類似的問題 XD
03/13 23:17, 4F

03/14 10:19, , 5F
推!
03/14 10:19, 5F

03/19 12:34, , 6F
push
03/19 12:34, 6F
文章代碼(AID): #1DUtALFO (Ajax)