function g(N, p) { var prefix = p.repeat(N); var str = prefix + "[AB]"; try { var re = new RegExp(str); re.exec(prefix + "A"); } catch(e) { // 1. Regexp too big is raised by the lack of the 64k virtual registers // reserved for the regexp evaluation. // 2. The stack overflow can occur during the analysis of the regexp assertEq(e.message.includes("regexp too big") || e.message.includes("Stack overflow") || e.message.includes("too much recursion"), true); } } var prefix = "/(?=k)ok/"; for (var i = 0; i < 18; i++) g(Math.pow(2, i), prefix)