js regex weirdness

Let's see an example

 

var reg = new RegExp("abc","gi");
console.log(reg.test("abc"));   
console.log(reg.test("abc"));  
console.log(reg.test("abc"));   
console.log(reg.test("abc"));
console.log(reg.test("abc"));   
console.log(reg.test("abc"));
console.log(reg.test("abc"));   
console.log(reg.test("abc"));

 Surprised to find that the print results are different.

There are 3 solutions 

var reg = new RegExp("abc","i");  
console.log(!!reg.match("abcd"));     
console.log(!!reg.match("abcd"));    
console.log(!!reg.match("abcd"));    
console.log(!!reg.match("abcd"));     
console.log(!!reg.match("abcd"));    
console.log(!!reg.match("abcd"));     
console.log(!!reg.match("abcd"));    
console.log(!!reg.match("abcd"));

 

  2 

var reg = new RegExp("abc","gi");
reg.lastIndex=0;console.log(reg.test("abc"));   
reg.lastIndex=0;console.log(reg.test("abc"));  
reg.lastIndex=0;console.log(reg.test("abc"));   
reg.lastIndex=0;console.log(reg.test("abc"));
reg.lastIndex=0;console.log(reg.test("abc"));   
reg.lastIndex=0;console.log(reg.test("abc"));
reg.lastIndex=0;console.log(reg.test("abc"));   
reg.lastIndex=0;console.log(reg.test("abc"));

 3

  

var reg = new RegExp("abc","gi");
var reg = new RegExp("abc","gi");  
console.log(!!'abc'.match(reg));
console.log(!!'abc'.match(reg));
console.log(!!'abc'.match(reg));
console.log(!!'abc'.match(reg));
console.log(!!'abc'.match(reg));
console.log(!!'abc'.match(reg));

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=326774085&siteId=291194637