ES6 正则表达式
正则表达式
基本概念
用于匹配字符串中字符组合的模式,在JavaScript中正则表达式也是对象。模式匹配常用在RegExp
exec
test
方法,以及String
的match
、matchAll
、replace
、search
和split
方法。
创建语法
使用下面两种方法都可以创建:
1 |
|
除此之外ES6还提供了带两个参数的RegExp
函数,但是在ES5这种写法是非法的。ES6中则放款了此项限制:
1 |
|
ES6新增功能:u
修饰符
u字符
为Unicode字符的意思,可以识别码点超过0xFFFF
的字符。前一章节也讲过ES6加入了Unicode字符表示。因此正则也是可以支持Unicode的模式识别的。例子如下:
1 |
|
预定义模式
另外u
字符也会影响预定义模式,能否正确识别大于0xFFFF
的Unicode字符:
1 |
|
ES6新增功能:y
修饰符
y
字符也称为粘连字符,其作用于g
修饰符类似。后一次匹配都从上一次匹配成功的下一个位置开始。不同之处在于g
修饰符只要剩余位置中存在匹配即可,而y
修饰符确保匹配必须从剩余的第一个位置开始;例子如下:
1 |
|
例子:g
修饰符和y
修饰符的区别
使用g
修饰符和lastIndex
来验证运行方式
1 |
|
使用y
修饰符和lastIndex
来验证运行方式
1 |
|
sticky属性
ES6正则对象多了sticky
属性,表示是否设置了y
修饰符。
1 |
|
flags属性
ES6为正则表达式新增了flags
属性,会返回正则表达式的修饰符。
1 |
|
ES6新增功能:s
修饰符
dotAll模式:即点代表一切字符
正则表达式中.
是个特殊字符,可以用于表示任意的单个字符。但是它排除了行终止符。而有时候我们希望匹配的是任意单个字符,因此,提案中引入了/s
修饰符,使得.
可以匹配任意单个字符。
1 |
|
先行断言
ES5中,JavaScript的正则表达式只支持“先行断言”和“先行否定断言”。先行断言的意思是:x
只有在y
前面才匹配,对应的正则模式需写成/x(?=y)/
。同理:先行否定断言是指:x
只有不在y
前面才匹配,对应的正则匹配模式为:/x(?!y)/
后行断言
ES7中新增了一个提案,允许正则表达式进行“后行断言”。后行断言的意思是:x
只有在y
的后面才匹配,必须写成/(?<=y)x/
。同理:后行否定断言是指:x只有不在y后面才匹配,对应的正则匹配模式为:/(?<!y)x/
Unicode属性类
目前有一个新提案,允许正则表达式匹配符合Unicode某种属性的所有字符,使用前一定要加上u
字符:
1 |
|
Unicode属性类要指定属性名和属性值:
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!