var matches;
while(matches = /./g.exec("abc"))
{
console.log("hey");
}这是永远不会终止的。我希望它在3个循环后终止。
警告:不要在Chrome中运行它,因为无限的日志行会冻结整个系统。在IE中运行它是安全的(它仍然冻结您的网页,但您可以转到地址栏并按回车重新加载)。
发布于 2015-10-08 12:37:22
这是在循环中执行exec的方式:
var matches;
var re = /./g;
while(matches = re.exec("abc")) {
if (matches.index === re.lastIndex)
re.lastIndex++;
console.log("hey");
}lastIndex (匹配位置)与结果数组的index属性相同,则将lastIndex增加1。发布于 2015-10-08 12:35:42
这是因为每次都要创建一个带有g标志的新对象,而不是保留一个regex对象。regex对象跟踪最后一次匹配。因为每次都要创建新对象,所以对象从一开始就开始了。
每个regex文字都是它自己的对象,这就是为什么:
/./g !== /./ghttps://stackoverflow.com/questions/33015942
复制相似问题