ES6正则表达式扩展

正则表达式

RegExp构造函数

new RegExp(/abc/ig, 'i').flags
// "i"

如果RegExp构造函数第一个参数是一个正则对象,那么可以使用第二个参数指定修饰符,同时会覆盖原来的正则表达式的修饰符。

u修饰符

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

\uD83D\uDC2A是一个四个字节的UTF-16编码,代表一个字符。

点字符

点(.)字符在正则表达式中,含义是除了换行符以外的任意单个字符。对于码点大于0xFFFF的Unicode字符,点字符不能识别,必须加上u修饰符。

Unicode字符表示法

ES6可以使用大括号表示Unicode字符,但要加上修饰符u

量词

所有量词都会正确识别码点大于0xFFFF的Unicode字符。

使用u修饰符的情况下,Unicode表达式当中的大括号才会被正确解读。

y修饰符

y修饰符的作用与g修饰符类似,也是全局匹配,后一次匹配都从上一次匹配成功的下一个位置开始。

sticky属性

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

flags属性

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

先行断言

x(?=y)与x(?!y)

先行断言 指的是,x只有在y前面才匹配,必须写成/x(?=y)/。 比如,只匹配百分号之前的数字,要写成/\d+(?=%)/。

先行否定断言指的是,x只有不在y前面才匹配,必须写成/x(?!y)/。 比如,只匹配不在百分号之前的数字,要写成/\d+(?!%)/。

“先行断言”括号之中的部分(?=%),是不计入返回结果的。

Last updated

Was this helpful?