正则的扩展

2021-02-23 14:31:47 浏览数 (1)

正则的扩展

RegExp 构造函数

第一种情况是,参数是字符串,这时第二个参数表示正则表达式的修饰符

第二种情况是,参数是一个正则表示式,这时会返回一个原有正则表达式的拷贝

ES5 不允许此时使用第二个参数添加修饰符,否则会报错

ES6 改变了这种行为。如果RegExp构造函数第一个参数是一个正则对象,那么可以使用第二个参数指定修饰符

字符串的正则方法

字符串对象共有 4 个方法,可以使用正则表达式:match()、replace()、search()和split()

u 修饰符

ES6 对正则表达式添加了u修饰符,含义为“Unicode 模式”,用来正确处理大于uFFFF的 Unicode 字符

点(.)字符在正则表达式中,含义是除了换行符以外的任意单个字符

对于码点大于0xFFFF的 Unicode 字符,点字符不能识别,必须加上u修饰符

ES6 新增了使用大括号表示 Unicode 字符,这种表示法在正则表达式中必须加上u修饰符,才能识别当中的大括号,否则会被解读为量词

使用u修饰符后,所有量词都会正确识别码点大于0xFFFF的 Unicode 字符

u修饰符也影响到预定义模式,能否正确识别码点大于0xFFFF的 Unicode 字符

RegExp.prototype.unicode 属性

正则实例对象新增unicode属性,表示是否设置了u修饰符

y 修饰符

ES6 还为正则表达式添加了y修饰符,叫做“粘连”(sticky)修饰符

RegExp.prototype.sticky 属性

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

RegExp.prototype.flags 属性

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

s 修饰符:dotAll 模式

正则表达式中,点(.)是一个特殊字符,代表任意的单个字符,但是有两个例外

一个是四个字节的 UTF-16 字符,这个可以用u修饰符解决;另一个是行终止符

这被称为dotAll模式,即点(dot)代表一切字符。所以,正则表达式还引入了一个dotAll属性,返回一个布尔值,表示该正则表达式是否处在dotAll模式

后行断言

”先行断言“指的是,x只有在y前面才匹配,必须写成/x(?=y)/

“后行断言”正好与“先行断言”相反,x只有在y后面才匹配,必须写成/(?<=y)x/

Unicode 属性类

ES2018 引入了一种新的类的写法p{...}和P{...},允许正则表达式匹配符合 Unicode 某种属性的所有字符

具名组匹配

正则表达式使用圆括号进行组匹配

有了具名组匹配以后,可以使用解构赋值直接从匹配结果上为变量赋值

如果要在正则表达式内部引用某个“具名组匹配”,可以使用k<组名>的写法

String.prototype.matchAll

如果一个正则表达式在字符串里面有多个匹配,现在一般使用g修饰符或y修饰符,在循环里面逐一取出

0 人点赞