ES6--正则的扩展

RegExp构造函数

1、字符串类参数:第一个参数是正则表达式字符串,第二个参数是正则表达式的修饰符。
2、正则对象类参数:ES5中不允许第二个参数(修饰符)出现。ES6改变了这种行为,第一个参数是正则对象,第二个参数指定修饰符。返回的正则表达式会忽略原有正则表达式的修饰符,使用第二个参数指定的修饰符。

字符串的正则方法

1、match()

2、replace()

3、search()

4、split()

ES6将以上四个方法,在语言内部全部调用RegExp的实例,这样与正则相关的方法就全都定义在RegExp对象上了。

u修饰符

ES6添加u修饰符,表示“Unicode模式”,用来处理大于\uFFFF的Unicode字符。
1、点字符
除了换行符以外的任意单个字符。对于码点大于0xFFFF的Unicode字符,点字符不能识别,必须加上u修饰符。
2、Unicode字符表示法
新增使用大括号表示Unicode字符,条件是正则表达式中必须加上u修饰符,才能识别当中的大括号。
3、量词
使用u修饰符后,所有量词都会正确识别码点大于0xFFFF的Unicode字符。
4、预定义模式
预定义模式,加了u修饰符后,才能正确匹配码点大于0xFFFF的Unicode字符。预定义模式如下:
预定义模式有:.(点)、\d、\D、\s、\S、\w、\W
5、i修饰符
加了u修饰符后,可是识别非规范的字符。比如:K,它对应编码是\u004B、\u212A

RegExp.prototype.unicode属性

正则实例对象新增unicode属性,表示是否设置了u修饰符。true:设置修饰符;false:未设置修饰符。

y修饰符

1、y修饰符的作用也是全局匹配,后一次匹配都从上一次匹配成功的下一个位置开始。与g不同之处在于,g修饰符只要剩余位置中存在匹配就行,而y修饰符确保匹配必须从剩余的第一个位置开始。所以称作"粘连"修饰符。
2、lastIndex属性指定每次搜索的开始位置。g修饰符从这个位置开始向后搜索,直到发现匹配为止。y修饰符要求必须从lastIndex指定的位置开始发现匹配。
3、y修饰符隐含了头部匹配的标识 ,这个修饰符设计本意,就是让头部匹配的标识符在全局匹配中都有效。
4、y修饰符对match方法,只能返回第一个匹配,必须与g修饰符联用,才可以返回所有匹配。
5、y修饰符的一个应用,是从字符串中提取目标字符串。y修饰符确保了匹配之间不会漏掉字符。

RegExp.prototype.sticky属性

ES6的正则实例对象多了sticky属性,表示是否设置了y修饰符。

RegExp.prototype.flags属性

ES6为正则表达式增加了flags属性,会返回正则表达式的修饰符。

s修饰符:dotAll模式

1、点(.)代表任意单个字符,除了四个字节的UTF-16字符,行终止符(\n、\r、行分隔符、段分隔符),四个字节的字符使用u修饰符解决。
2、ES2018中引入s修饰符,使点(.)可以匹配任意单个字符,这被称为dotAll模式,点(.)代表一切字符。
3、正则表达式引入了一个dotAll属性,返回一个布尔值,表示该正则表达式是否处在dotAll模式。

后行断言

1、后行断言先从左到右扫描,发现匹配后再回头,“从右到左”执行。
2、后行断言反斜杠引用也与通常的顺序相反,必须放在对应的括号之前。

Unicode属性类

1、ES2018中引入新类写法\p{…}和\P{…},允许正则表达式匹配符合Unicode某种属性的所有字符。
2、\p{…}和\P{…}是反向匹配,匹配不满足条件的字符。
3、\p{…}和\P{…}只对Unicode有效,使用时一定要加上u修饰符。

具名组匹配

1、正则表达式每个组匹配,只能使用数字序号引用。如果组顺序变动,引用时必须修改序号。所以ES2018引入具名组匹配。允许为每个组指定一个名字。格式是在每个组头部添加:问号+尖括号+组名(?expression)。
2、正则表达式的方法exec,返回值会有一个groups属性。定义了具名组匹配,就会作为这个属性的值返回,如果不定义具名组匹配,该值为undefined。
3、具名组没有匹配到对应时,groups中组名属性对应值为undefined。

解构赋值和替换

1、具名组匹配可以使用解构赋值直接从匹配结果上为变量进行赋值。即可以将exec方法的返回值进行解构赋值,主要解构具名组对象groups。
2、replace方法可以使用$<组名>引用具名组进行字符串替换。
3、replace第二个参数可以是一个函数,该函数的形参和exec返回值的结构一样。所以可以在该函数内部对具名组对象进行解构赋值。

引用

1、在正则表达式内部引用某个“具名组匹配”,可以使用\k<组名>的写法,和数组引用相同。

String.prototype.matchAll

1、使用String.prototype.matchAll,可以一次性取出所有匹配。它返回的是一个遍历器,可以使用for…of循环取出。
2、遍历器转换为数组:
(1)使用…运算符

[...string.matchAll(regex)]

(2)Array.from方法

Array.from(string.matchAll(regex));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值