为什么`pattern.test(name)`在连续调用时产生相反的结果

Aru*_*hny 12 javascript regex

为什么这段代码首先返回true,然后返回false

var pattern = new RegExp("mstea", 'gi'), name = "Amanda Olmstead";

console.log('1', pattern.test(name));
console.log('1', pattern.test(name));
Run Code Online (Sandbox Code Playgroud)

演示:小提琴

Den*_*ret 9

g用于重复搜索.它将正则表达式对象更改为迭代器.如果要根据模式使用该test函数检查字符串是否有效,请删除此修饰符:

var pattern = new RegExp("mstea", 'i'), name = "Amanda Olmstead";
Run Code Online (Sandbox Code Playgroud)

test函数与整个迭代相反replacematch不消耗,使其处于"坏"状态.使用该test函数时,您可能永远不会使用此修饰符.


Mar*_*ton 7

您不希望将gi与pattern.test结合使用.g标志表示它会跟踪您正在运行的位置,以便可以重复使用.所以相反,你应该使用:

var pattern = new RegExp("mstea", 'i'), name = "Amanda Olmstead";

console.log('1', pattern.test(name));
console.log('1', pattern.test(name));
Run Code Online (Sandbox Code Playgroud)

此外,您可以使用/.../[flags]语法进行正则表达式,如下所示:

var pattern = /mstea/i;
Run Code Online (Sandbox Code Playgroud)