正则

定义

正确的规则,它是专门处理字符串的

正则分为修饰符和元字符【两次元字符,和特殊元字符】,其中两个斜杠中属于元字符,斜杠后面是属于修饰符

如何创建一个正则

  • 通过字面量方式来创建
let reg = /\d/
  • 通过实例化的方式来创建,通过new关键字执行正则类,返回一个正则的实例;如果你创建的正则中有变量,我们必须通过实例化的方式来创建,通过实例化的方式创建,第一个参数式元字符,第二个参数式修饰符
let regExp = new RegExp(str);

正则的方法

  • test

验证(校验创建的字符串,是否如何正确的规则,如果匹配的话返回true,如果不匹配返回false)

  • exec

捕获(不会之前会先拿正则匹配传入的字符串,如果匹配成功,返回字符串的详细信息,如果匹配不成功,返回null)

正则中常用的修饰符

i 忽略大小写
m 多行匹配
g 全局匹配

正则中常用的量词元字符

* 0个到多个
+ 1个到多个
0个或一个(有或没有)
匹配到n个
匹配n个到多个
匹配n到m个

正则中常用的特殊元字符

\d 匹配0-9至之间的任意一个数字
\D 除了0-9之间的任意字符
\w 匹配除了数字、字母、下划线,中的任意一个字符
\W 除了数字、字母、下划线,以外的任意字符
\s 匹配一个空白字符
\S 除了空白字符意外的其他字符
\b 匹配一个边界
\B 除了边界以外的其他字符
\n 匹配一个换行符
. 匹配除了换行符以外的其他字符
^ 匹配一个开始的符号
$ 匹配一个结束的符号
竖杠 或者
[] 或者,只能取其中一个
x\y x,y中的任意一个字符
[xy] x或y中的任意一个字符
[^xyz] 非,除了xyz中的任意字符
[a-z] 范围,a-z中的任意一个字符
() 分组捕获,提高优先级,分组引用
(?😃 取消分组捕获
(?=) 正向预查
(?!) 负向预查

普通元字符

在正则当中,字面量方式创建的,两个斜杠中的,除了特殊元字符和量词元字符意外的都叫做普通元字符

正则中的捕获

正则中的捕获:exec会先进行校验,如果校验成功,返回字符串的详细信息,如果校验失败返回null

修饰符g标识全局匹配,会按照字符串从左到右的顺序进行匹配
lastIndex:下一次按照这个索引的位置进行捕获
注意:用正则取校验的时候,如果你家g全局校验的话,每次校验的内容都不一样

  • 如果可以匹配,获取的结果是一个数组,如果不匹配获取的结果是null
  • 如果我们旨在匹配的时候,想要获取大正则的部分信息,我们可以把这部分使用小括号抱起来,形成一个数组,这样在捕获的时候,不仅可以把大正则匹配的信息捕获到,而且还单独的把小分组匹配的部分信息捕获到了(分组捕获)
  • 有时候写小分组不是为了捕获信息,只是为了改变优先级或者分组引用,此时我们可以在分组的前面加上?:,代表只去匹配,但是不把这个分组内容捕获

正则的懒惰性

每次捕获只捕获到第一次匹配到的内容,剩余的内容不在捕获了

解决办法

加一个量词元字符,每次捕获按照最大值来捕获

var reg = /\d+/;

正则的贪婪性

每次捕获都全部捕获出来,是因为有两次元字符的存在

解决方法

需要在两次元字符的后面加一个?,这样的话每次捕获都按最少的捕获

var reg = /\d{2,4}?/;

正则中的小括号

  • 提高优先级
  • 分组捕获
  • 分组引用

正则中的中括号

  • 中括中出现的元字符一般都是代表本身含义的
  • 中括号中出现的两位数,不是两位数,而是两位数中的任意一个
  • 正则中的中括号表示,括号中的字符取任意一个
posted @ 2019-04-12 19:33  我会放电啪啪  阅读(203)  评论(0编辑  收藏  举报