收藏本站腾讯微博新浪微博

经典论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

蓝色理想 最新研发动态 网站开通淘帖功能 - 蓝色理想插件 论坛内容导读一页看论坛 - 给官方提建议

论坛活动及任务 地图和邮件任务 请多用悬赏提问 热夏来袭,选一款蓝色理想的个性T恤吧!

手机上论坛,使用APP获得更好体验 急需前端攻城狮,获得内部推荐机会 论坛开通淘帖功能,收藏终于可以分类了!

搜索
查看: 1666|回复: 0

[正则] js正则表达式字面量和使用RegExp构造函数创建的正则表达式不一样。

[复制链接]
发表于 2016-5-27 19:18:02 | 显示全部楼层 |阅读模式
使用正则表达式字面量和使用RegExp构造函数创建的正则表达式不一样。在ECMAScript3中,正则表达式字面量始终会共享一个RegExp实例,而使用构造函数创建的每一个新RegExp实例都是一个新实例。
那为什么
var re=null,i;
for(i=0;i<10;i++){
re=/cat/g;
document.write(re.test('catastrophe'));
}
document.write('                 ');
for(i=0;i<10;i++){
re=new RegExp("cat","g");
document.write(re.test('catastrophe'));
}
返回的值都是一样的 都是10个true。
--------------------js高级程序设计第3版的原话--------------------
在第一个循环中,即使是循环体中指定的,但实际上只为/cat/创建一个RegExp实例。由于实例属性不会重置,所以在循环中再次调用test()方法会失败。这是因为第一次调用test()找到了"cat",但第二次调用是从索引为3的字符(上一次匹配的末尾)开始的,所以就找不到它了。由于会测试到字符串末尾,所以下一次再调用test()就从头开始。第二个循环使用RegExp构造函数在每次循环中创建正则表达式。因为每次迭代都会创建一个新的EegExp实例,所以每次调用test()都会返回true。
----------------
第一个for循环不是应该是truefalsetruefalsetruefalsetruefalse吗?为什么都是true
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|Archiver|手机版|blueidea.com ( 湘ICP备12001430号 )  

GMT+8, 2020-12-5 20:07 , Processed in 0.093514 second(s), 7 queries , Gzip On, Memcache On.

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表