当我使用全局标志和不区分大小写的标志时,这个正则表达式有什么问题?查询是用户生成的输入.结果应该是[true,true].
var query = 'Foo B';
var re = new RegExp(query, 'gi');
var result = [];
result.push(re.test('Foo Bar'));
result.push(re.test('Foo Bar'));
// result will be [true, false]
Run Code Online (Sandbox Code Playgroud)
var reg = /^a$/g;
for(i = 0; i++ < 10;)
console.log(reg.test("a"));Run Code Online (Sandbox Code Playgroud)
我有另一个问题,虽然它得到了解答我不明白为什么正则表达式会受到影响
它来自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时为什么会影响我的下一次调用?!如果可以的话,提供我真正想要的"功能"