正则理解

正则的理解

  1. 正则的懒惰性

每一次在exec()中捕获的时候,只捕获第一次匹配的内容,而不往下捕获了。我们把这叫正则的懒惰性,每一次捕获的开始位置都是从0开始

 var reg=/\d+/;

 var st="he45612llo12345"

cosole.log(reg.exec(st))----结果:45612

解决正则的懒惰性呢

修饰符g

正则的实例对象reg上有一个lastIndex属性 他是正则捕获的起始位置

 var reg=/\d+/g;

 var st="he45612llo12345"

cosole.log(reg.exec(st))----结果:45612

cosole.log(reg.exec(st))----结果:12345

cosole.log(reg.exec(st))----结果:null

  1. 正则的贪婪性

每一次匹配都是按照最长的出结果,我们把这种功能叫正则的贪婪性

 

 var reg=/\d+/;

 var st="hello12345"

cosole.log(reg.exec(st))----结果:12345

如何解决正则的贪婪性

在元字符量词后面加?

 var reg=/\d+?/g;

 var st="he45612llo12345"

cosole.log(reg.exec(st))----结果:4,5,6,1,2,1,2,3,4,5

补充 循环语句  for   for  in  while   do---while---

 var i=12;

var num=null;

while(i<11){

  sum=sum+i;

  i++;

}

console.log(sum)//先判断后执行

结果:null;

 var i=12;

var num=null;

do{

  sum=sum+i;

  i++;

}

while(i<11)

console.log(sum)//先判断后执行

结果:12

二 分组捕获 正则带()  在数分组的个数时从左往右

var reg=/(a)(b)/ 就相当于大正则里面带了两个小正则

第一组是(a) 第二组是(b)

分组捕获的作用

  1. 改变优先级
  2. 分组引用  \1,\2

\2代表和第二个分组出现一模一样的内容,\1代表和第一个分组出现一模一样的内容

 var reg/(\w)\1(\w)\2/

var st="ssdd"

var s=reg.test(st)

console.log(s)

Reg中的规则是第一个是一个分组 且是一个单词字符 第二个是个分组引用要求和第一组一模一样,第三个是第二个分组且是一个单词字符,第四个是一个分组引用,要求和第二组一模一样。

3.分组捕获

分组的捕获前提是正则存在分组,不仅把大正则的内容捕获到,把小正则的内容也捕获到。

 var reg=/(a)(b)/

/ab/ /a/ /b/

var st="absd"

console.log(reg.exec(st))//ab,a,b

怎样解除分组中分组捕获呢,如果你不想捕获某一个分组中的内容,在这个分组的前面加上?:就可以了

 var reg=/(a)(?:b)/

/ab/ /a/ /b/

var st="absd"

console.log(reg.exec(st))//ab,a

posted @ 2018-12-18 19:16  前端开创者123  阅读(127)  评论(0编辑  收藏  举报