javascript-在Firefox中反复调用时,RegExp.exec()返回null?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript-在Firefox中反复调用时,RegExp.exec()返回null?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1099字,纯文字阅读大概需要2分钟。
内容图文
![javascript-在Firefox中反复调用时,RegExp.exec()返回null?](/upload/InfoBanner/zyjiaocheng/675/1611f5e10a3b489f85c351ee7e34bb16.jpg)
我在Firefox 10和11中使用正则表达式函数exec()遇到问题.
多次调用该函数时,其行为似乎不稳定.在正确的结果中,它还会返回很多null.从Safari 5.1.3,Chrome 18和上述Firefox版本开始,我只能在Firefox中看到该问题.
我创建了一个JSFiddle来演示问题:http://jsfiddle.net/KSH3S/,来源:
var i, x = "";
for (i = 0; i < 10000; i++) {
var matches = /foo/g.exec('sdkfjfooasdknal');
x += matches + "<br>";
}
$('body').html(x);
在我的两个Firefox版本中,这将返回40x foo,1x null,41x foo,从那时开始,每次调用时,这两者之间就会互换.
你遇到过这个吗?
解决方法:
问题与循环内正则表达式的隐式声明有关.我的猜测是浏览器正在将其缓存在某个位置,或者由于某种原因而感到困惑.
如果您每次通过for循环都显式创建一个新的regex对象,则Firefox不再存在以下问题:
var x = "";
for (var i=0; i<10000; i++) {
var re = new RegExp("foo", "g");
var matches = re.exec( 'sdkfjfooasdknal' );
x += matches+"<br>";
}
$('body').html( x );
http://jsfiddle.net/jfriend00/F49db/
而且,无论哪种方式显式声明正则表达式都无关紧要,因为此方法也可以工作:
var x = "";
for (var i=0; i<10000; i++) {
var re = /foo/g;
var matches = re.exec( 'sdkfjfooasdknal' );
x += matches+"<br>";
}
$('body').html( x );
内容总结
以上是互联网集市为您收集整理的javascript-在Firefox中反复调用时,RegExp.exec()返回null?全部内容,希望文章能够帮你解决javascript-在Firefox中反复调用时,RegExp.exec()返回null?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。