相关疑难解决方法(0)

为什么带有全局标志的RegExp会产生错误的结果?

当我使用全局标志和不区分大小写的标志时,这个正则表达式有什么问题?查询是用户生成的输入.结果应该是[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)

javascript regex

254
推荐指数
4
解决办法
4万
查看次数

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

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

它来自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时为什么会影响我的下一次调用?!如果可以的话,提供我真正想要的"功能"

javascript regex

4
推荐指数
1
解决办法
644
查看次数

标签 统计

javascript ×2

regex ×2