作者B9 (叶酸酸)
看板Ajax
标题[心得] RegExp object :)
时间Sat Mar 12 21:18:10 2011
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
1F:→ TonyQ:推。XD 03/13 02:07
2F:推 weiyucsie:楼上没推到XD 03/13 19:29
3F:推 s25g5d4:那就只好帮他补推了 XD 03/13 19:56
4F:推 lth5:推 前几天也遇到类似的问题 XD 03/13 23:17
5F:推 chrisQQ:推! 03/14 10:19
6F:推 gpmm:push 03/19 12:34