一个有关正则表达式的问题
请看下面方法: 
 function   checkTest(){ 
 	      var   zz   =   /h[ea]{1,2}d/g; 
 	      alert(zz.test( "heed ")); 
 	      alert(zz.test( "head ")); 
 	      alert(zz.test( "haad ")); 
 	      alert(zz.test( "haed ")); 
 	} 
 输出结果: 
 true 
 false 
 ture 
 false   
 请问javascript高手这是为什么?
------解决方案--------------------function checkTest(){ 
 var zz = /h[ea]{1,2}d/g; 
 alert(zz.test( "heed ")); 
 zz.compile(); 
 alert(zz.test( "head ")); 
 zz.compile(); 
 alert(zz.test( "haad ")); 
 zz.compile(); 
 alert(zz.test( "haed ")); 
 }
------解决方案--------------------http://community.csdn.net/Expert/TopicView3.asp?id=5422907   
 看后面的关于第3点的解释   
 和g与lastIndex有关, 
 解决的办法还是上面的:每次调用前在重新编译下 
 仔细看看下文 
 http://www.chiqiang.com/logs/2006/11/3785992.html     
 我把关键的地方烤下来: 
 1。 假如你的正则表达式使用了 "g "标记,你可以多次使用exec 方法来连续匹配相同的串。当你这样做 
 的时候,新的匹配将从由正则表达式的lastIndex 属性值确定的子串中开始。(test一样的方法)   
 2。 
 RegExp的属性 在javascript 1.2, NES 3.0以上版本提供  
 描述:lastIndex 是个别的正则表达式对象的属性。 这个属性只有当正则表达式的 "g "标记被使用以进行全串匹配的时候才被设置。实行以下规则: 
 如果lastIndex大小字符串的长度,regexp.test和regexp.exec失败,且lastIndex被设为0。 
 如果lastIndex等于字串的长度且正则表达式匹配空字符串,则正则表达式从lastIndex的位置开始匹配。 
 如果lastIndex等于字符串的长度且正则表达式不匹配空字符串,则正则表达式不匹配input,且lastIndex被置为0。 
 否则,lastIndex被设置成最近一次匹配的下一点。   
 举例   
 var bbb=/[a-z\u4e00-\u9fa5]{2,}/gi 
 alert(bbb.test( "aaaaaa ")) 
 alert(bbb.lastIndex) 
 //var bbb=/[a-z\u4e00-\u9fa5]{2,}/gi  
 alert(bbb.test( "中中aa中中 ")) 
 alert(bbb.lastIndex) 
 //var bbb=/[a-z\u4e00-\u9fa5]{2,}/gi 
 alert(bbb.test( "aaa中aa ")) 
 alert(bbb.lastIndex)     
 这个与上面的区别在于第2个的长度,比6大多了,可以匹配到true 
 var bbb=/[a-z\u4e00-\u9fa5]{2,}/gi 
 alert(bbb.test( "aaaaaa ")) 
 alert(bbb.lastIndex) 
 //var bbb=/[a-z\u4e00-\u9fa5]{2,}/gi 
 alert(bbb.test( "中中aa中中中中中中 ")) 
 alert(bbb.lastIndex) 
 //var bbb=/[a-z\u4e00-\u9fa5]{2,}/gi 
 alert(bbb.test( "aaa中aa ")) 
 alert(bbb.lastIndex)