正则全局g的问题

  let add="121432453253";
  let abb="1214321321"
  let testdemo=/^([0-9]+)$/g
  if(testdemo.test(add)){
    console.log(true)//true
  }else{
   console.log(false)
   }
  if(testdemo.test(abb)){
    console.log(true)
   }else{
    console.log(false)//false
  }

按理说两次都打印true的,后来我把全局查找g去掉,就两个都是true了,导致这样的原因是:

如果正则表达式有指定g参数全局匹配 , 则每次test()是依次获得下一个匹配。举例说明:

var num="123";
var argur=/([0-9])/g;
for(i=0;i<8;i++){
 console.log(argur.test(num));
}

上面的代码结果是3个true,1个false,再3个true,再1个false。

true true true false true true true false

第1次test匹配数字1,第2次test数字2,第3次test匹配数字3,第4次test找不到匹配,之后又从头重新开始:
第5次重头开始test匹配数字1,第6次test数字2,第6次test数字3,第8次test找不到匹配............

如果正则表达式没有g参数,则每次test都是从头开始匹配,不存在上述问题。
没有g参数的正则表达式:

var num="123";

var argur=/([0-9])/g;

for(i=0;i<8;i++){

console.log(argur.test(num));

}

都是true,

不过利用这个全局g也可以打印出你每次想要匹配到的数据,看你有没有这个需求而已

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值