看板 Ajax 關於我們 聯絡資訊
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
TonyQ:推。XD 03/13 02:07
weiyucsie:樓上沒推到XD 03/13 19:29
s25g5d4:那就只好幫他補推了 XD 03/13 19:56
lth5:推 前幾天也遇到類似的問題 XD 03/13 23:17
chrisQQ:推! 03/14 10:19
gpmm:push 03/19 12:34