JS正则test方法调用问题

wgale025 2010-04-06 11:30:11
第一问:为什么下面代码,在IE,Opera下面执行都是打印True,在FireFox和Chrome下面是True和False交替显示呢?
<script type="text/javascript">
<!--
for(var i=0;i<20;i++){
var re=/^[0-9a-z]{6,16}$/gi;
var username='wger025';
document.write("<br/>");
document.write(re.test(username));
}
document.write("<br/>");
document.write("---------------------------------------------------------------");
//-->
</script>
第二问:为什么下面代码,在任何浏览器下都是True和False交显示呢?
<script type="text/javascript">
<!--
var re2=/^[0-9a-z]{6,16}$/gi;
var username2='wger025';
for(var i=0;i<20;i++){

document.write("<br/>");
document.write(re2.test(username2));
}
//-->
正则表达式的解析引擎会变吗?同一段代码,为什么一会True一会False呢?
如果把正则表达式改成:var re=/^[0-9a-z]{6,16}$/i;把g去掉,所有的浏览器都打印出True,不明所以,请教各位高手,为撒呢?
...全文
2653 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wgale025 2010-04-06
  • 打赏
  • 举报
回复
在线等。。。
wgale025 2010-04-06
  • 打赏
  • 举报
回复
求解,怎么没人?
wgale025 2010-04-06
  • 打赏
  • 举报
回复
3Q
mytigo 2010-04-06
  • 打赏
  • 举报
回复
对啊。
wgale025 2010-04-06
  • 打赏
  • 举报
回复
<script type="text/javascript">
<!--
var re2=/^[0-9a-z]{6,16}$/gi;
var username2='wger025';
for(var i=0;i<20;i++){
re2.lastIndex=0;
document.write("<br/>");
document.write(re2.test(username2));
}
//-->
这样写就可以了么?
mytigo 2010-04-06
  • 打赏
  • 举报
回复
lastIndex 属性用于规定下次匹配的起始位置。

语法
RegExpObject.lastIndex说明
该属性存放一个整数,它声明的是上一次匹配文本之后的第一个字符的位置。

上次匹配的结果是由方法 RegExp.exec() 和 RegExp.test() 找到的,它们都以 lastIndex 属性所指的位置作为下次检索的起始点。这样,就可以通过反复调用这两个方法来遍历一个字符串中的所有匹配文本。

该属性是可读可写的。只要目标字符串的下一次搜索开始,就可以对它进行设置。当方法 exec() 或 test() 再也找不到可以匹配的文本时,它们会自动把 lastIndex 属性重置为 0。

提示和注释
重要事项:不具有标志 g 和不表示全局模式的 RegExp 对象不能使用 lastIndex 属性。

提示:如果在成功地匹配了某个字符串之后就开始检索另一个新的字符串,需要手动地把这个属性设置为 0。

87,902

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧