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
03/13 02:07, 1F
推
03/13 19:29, , 2F
03/13 19:29, 2F
推
03/13 19:56, , 3F
03/13 19:56, 3F
推
03/13 23:17, , 4F
03/13 23:17, 4F
推
03/14 10:19, , 5F
03/14 10:19, 5F
推
03/19 12:34, , 6F
03/19 12:34, 6F