forEach中使用正则表达式出现的一些不一致的情况,求解答

在JavaScript中使用正则时出现的一些前后不匹配的意外结果

情况一,输出为true false false

let reg=new RegExp(/12/,'gi'); //也可以写成字面量形式 let reg=/12/gi;
['a312','12','a321'].forEach(element => {
    console.log(reg.test(element))
});
//输出为:true false false

情况二,输出为 true true false

['a312','12','a321'].forEach(element => {
    console.log(/12/gi.test(element))
});
//输出为:true true false

好奇怪!
求解释

正则的 lastIndex属性https://www.runoob.com/jsref/jsref-lastindex-regexp.html 导致的

每个RegExp都有一个lastIndex属性,当使用test方法且全局匹配时(g),如果能匹配到结果,则返回true,且lastIndex会改变,下一次再调用test方法时,会从lastIndex指定的位置处开始检索;如果不能匹配到结果,则返回false,且lastIndex属性置0

可以手动置为0:reg.lastIndex = 0,或者重新声明reg