JS正则表达式写法和用法
1. 定义
javascript 正确的规则,它是专门处理字符串的
正则分为修饰符和元字符【两次元字符,和特殊元字符】,其中两个斜杠中属于元字符,斜杠后面是属于修饰符
2.如何创建一个正则
- 通过字面量方式来创建 let reg = /\d/
let reg = /\d/
- 通过实例化的方式来创建,通过new关键字执行正则类,返回一个正则的实例;如果你创建的正则中有变量,我们必须通过实例化的方式来创建,通过实例化的方式创建,第一个参数式元字符,第二个参数式修饰符
let regExp = new RegExp(str);
3.正则的方法
- test
验证(校验创建的字符串,是否如何正确的规则,如果匹配的话返回true,如果不匹配返回false)
例子:
let reg = /[a-z]/
reg.test(‘a’) // true
reg.test(999) //false
- exec
捕获(不会之前会先拿正则匹配传入的字符串,如果匹配成功,返回字符串的详细信息,如果匹配不成功,返回null)
例子:
let reg = /[a-z]/
reg.exec(‘a’) //[0: “a”, groups: undefined,index: 0,input: “a”]
reg.exec(99) // null
4.正则中常用的修饰符
i | 忽略大小写 |
---|---|
m | 多行匹配 |
g | 全局匹配 |
5.正则中常用的量词元字符 | |
* | 0个到多个 |
– | – |
+ | 1个到多个 |
? | 0个或一个(有或没有) |
{n} | 匹配到n个 |
{n,} | 匹配n个到多个 |
{n,m} | 匹配n到m个 |
6.正则中常用的特殊元字符 | |
\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中的任意一个字符 |
() | 分组捕获,提高优先级,分组引用 |
(?😃 | 取消分组捕获 |
(?=) | 正向预查 |
(?!) | 负向预查 |
7.普通元字符 |
在正则当中,字面量方式创建的,两个斜杠中的,除了特殊元字符和量词元字符意外的都叫做普通元字符
8.正则中的捕获
正则中的捕获:exec会先进行校验,如果校验成功,返回字符串的详细信息,如果校验失败返回null
修饰符g标识全局匹配,会按照字符串从左到右的顺序进行匹配
lastIndex:下一次按照这个索引的位置进行捕获
注意:用正则取校验的时候,如果你家g全局校验的话,每次校验的内容都不一样
- 如果可以匹配,获取的结果是一个数组,如果不匹配获取的结果是null
- 如果我们旨在匹配的时候,想要获取大正则的部分信息,我们可以把这部分使用小括号抱起来,形成一个数组,这样在捕获的时候,不仅可以把大正则匹配的信息捕获到,而且还单独的把小分组匹配的部分信息捕获到了(分组捕获)
- 有时候写小分组不是为了捕获信息,只是为了改变优先级或者分组引用,此时我们可以在分组的前面加上?:,代表只去匹配,但是不把这个分组内容捕获
9.正则的懒惰性
每次捕获只捕获到第一次匹配到的内容,剩余的内容不在捕获了
||
解决办法
||
加一个量词元字符,每次捕获按照最大值来捕获 var reg = /\d+/;
10.正则的贪婪性
每次捕获都全部捕获出来,是因为有两次元字符的存在
||
解决方法
||
需要在两次元字符的后面加一个?,这样的话每次捕获都按最少的捕获 var reg = /\d{2,4}?/;
11.正则中的小括号
- 提高优先级
- 分组捕获
- 分组引用
12.正则中的中括号
- 中括中出现的元字符一般都是代表本身含义的
- 中括号中出现的两位数,不是两位数,而是两位数中的任意一个
- 正则中的中括号表示,括号中的字符取任意一个
13.字符串.match,返回满足正则的内容,返回类型为数据
- str = ‘1a2a3’;
- let re = /a/g
- console.log(str.match(re));
- 返回为:[ ‘a’, ‘a’ ]