为什么Regex Javascript // g标志影响状态?

4 javascript regex

我有另一个问题,虽然它得到了解答我不明白为什么正则表达式会受到影响

它来自w3schools

g:执行全局匹配(查找所有匹配项,而不是在第一次匹配后停止)

是当然.我明白.这就是为什么我在这段代码中得到一个数组

var str="The rain in SPAIN stays mainly in the plain";
var patt1=/ain/gi;
document.write(str.match(patt1));
Run Code Online (Sandbox Code Playgroud)

输出:

ain,AIN,ain,ain 
Run Code Online (Sandbox Code Playgroud)

正则表达式类似,/g它将替换多个实例.

然而在比赛中

var re=/hi/gi;
alert(re.test("hi") + " " + re.test("hi"));
Run Code Online (Sandbox Code Playgroud)

结果是"真假".

现在为什么$%^&它会这样做?两个测试中的字符串完全相同!在过去,我认为全球意味着它将搜索新行(这是我想在此测试中做的).我引用的第一件事是关于g是全球比赛.

没有任何关于它的任何参考影响NEXT CALL!没有/ g代码将正常工作(我也不需要跨越换行符).为什么它会影响下一次测试?gumbo的答案提到它会影响调用的lastIndex以及%^&*我不知道有共享状态,因为其他两个函数在我使用g标志时没有使用它.我只想要一个真假,但如果有什么不匹配则返回一个包含全局匹配数量的int?(即"hi"中的1,但字符串"hihi"中的2).

在做regex.test时为什么会影响我的下一次调用?!如果可以的话,提供我真正想要的"功能"

Mat*_*sch 9

在正则表达式中使用全局标志时,将更新lastIndex属性.lastIndex属性是开始下一个匹配的索引.

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/RegExp

您可以在再次呼叫之前重置最后一个索引.看到

为什么在Javascript中使用全局标志的RegExp会给出错误的结果?