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。 展开
那为什么
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。 展开
2个回答
展开全部
ECMAScript3中,正则表达式字面量始终共享一个RegExp实例,而使用构造函数创建的每一个新RegExp实例都是一个新实例。
ECMAScript5中,规定使用正则表达式字面量必须像直接调用构造函数一样,每次创建新的实例。IE9+,FF4+,Chrome都做出了修改。
ECMAScript5中,规定使用正则表达式字面量必须像直接调用构造函数一样,每次创建新的实例。IE9+,FF4+,Chrome都做出了修改。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
表现一样的啊,哪边有这个说明--‘正则表达式字面量始终会共享一个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,
所以他们要么用的不是同一个实例,要么状态被重置了
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询