以下代码始终导致无限循环,我不知道为什么。
var regex1 = /Hi([^]*?)Hi/g
var str = `
Hi my name is Hi
`;
function doStuff(str) {
var lastMatchIndex = 0
while ((m = regex1.exec(str)) !== null) {
console.log("it's not null")
//firstblock is the content between the 2 hi's
var firstblock = m[1] || ""
if (firstblock !== "") {
console.log(doStuff(firstblock))
}
}
return str
}
doStuff(str)
我假设while循环将发生一次,并且firstblock
等于“我的名字是”。当我调用console.log(doStuff(firstblock))
时,将没有匹配项,因此while循环将不会执行,它将在屏幕上显示“ my name is”。怎么了?
我将举一个例子,但它可能会破坏您的浏览器标签。被警告。 :)
答案 0 :(得分:1)
在return;
条件内缺少if
是为了防止外部递归函数产生无限循环。 console.log(doStuff(firstblock))
将第二次调用doStuff
函数,然后第二次调用将简单地返回str
。将该控件传递给调用递归函数,现在该函数需要将控件返回到doStuff(str)
,否则while
循环将无限执行。
var regex1 = /Hi([^]*?)Hi/g
var str = `Hi my name is Hi`;
function doStuff(str) {
var lastMatchIndex = 0
while ((m = regex1.exec(str)) !== null) {
console.log("it's not null")
//firstblock is the content between the 2 hi's
var firstblock = m[1] || ""
if (firstblock !== "") {
console.log(doStuff(firstblock));
return;
}
}
return str
}
doStuff(str)