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

使用正则表达式字面量和使用RegExp构造函数创建的正则表达式不一样。在ECMAScript3中,正则表达式字面量始终会共享一个RegExp实例,而使用构造函数创建的每一... 使用正则表达式字面量和使用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。 第一个for循环不是应该是truefalsetruefalsetruefalsetruefalse吗
使用IE6 8都是这个结果
在第一个循环中,即使是循环体中指定的,但实际上只为/cat/创建一个RegExp实例。由于实例属性不会重置,所以在循环中再次调用test()方法会失败。这是因为第一次调用test()找到了"cat",但第二次调用是从索引为3的字符(上一次匹配的末尾)开始的,所以就找不到它了。由于会测试到字符串末尾,所以下一次再调用test()就从头开始。第二个循环使用RegExp构造函数在每次循环中创建正则表达式。因为每次迭代都会创建一个新的EegExp实例,所以每次调用test()都会返回true。
展开
 我来答
hhhhhqhhhhhjjj
2018-09-18
知道答主
回答量:2
采纳率:0%
帮助的人:1915
展开全部
ECMAScript3中,正则表达式字面量始终共享一个RegExp实例,而使用构造函数创建的每一个新RegExp实例都是一个新实例。
ECMAScript5中,规定使用正则表达式字面量必须像直接调用构造函数一样,每次创建新的实例。IE9+,FF4+,Chrome都做出了修改。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lkiarest
推荐于2018-04-21 · TA获得超过543个赞
知道小有建树答主
回答量:761
采纳率:100%
帮助的人:411万
展开全部

表现一样的啊,哪边有这个说明--‘正则表达式字面量始终会共享一个RegExp实例’

加一句打印

           for(i=0;i<10;i++){
                 re=/cat/g;
                 document.write("<br>" + re.lastIndex);
                 document.write(re.test('catastrophe'));
            }

结果lastIndex全为0的,

如果把re=/cat/g放在循环外面,lastIndex会变成3,

所以他们要么用的不是同一个实例,要么状态被重置了

本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式