es6正则表达式
es6中如果RegExp构造函数第一个参数是一个正则对象,那么可以使用第二个参数指定修饰符。
而且,返回的正则表达式会忽略原有的正则表达式的修饰符,只使用新指定的修饰符。
new RegExp(/abc/ig, 'i').flags // "i"
u修饰符
(1)点字符
点(.
)字符在正则表达式中,含义是除了换行符以外的任意单个字符。对于码点大于0xFFFF
的Unicode字符,点字符不能识别,必须加上u
修饰符。
(2)Unicode字符表示法
ES6新增了使用大括号表示Unicode字符,这种表示法在正则表达式中必须加上u
修饰符,才能识别。
(3)量词
使用u
修饰符后,所有量词都会正确识别码点大于0xFFFF
的Unicode字符。
(4)预定义模式
u
修饰符也影响到预定义模式,能否正确识别码点大于0xFFFF
的Unicode字符。
(5)i修饰符
有些Unicode字符的编码不同,但是字型很相近,比如,\u004B
与\u212A
都是大写的K
。
y 修饰符
y
修饰符的作用与g
修饰符类似,也是全局匹配,后一次匹配都从上一次匹配成功的下一个位置开始。不同之处在于,
g
修饰符只要剩余位置中存在匹配就可,而y
修饰符确保匹配必须从剩余的第一个位置开始,这也就是“粘连”的涵义。
sticky属性
与y
修饰符相匹配,ES6的正则对象多了sticky
属性,表示是否设置了y
修饰符。
var r = /hello\d/y; r.sticky // true
flags属性
ES6为正则表达式新增了flags
属性,会返回正则表达式的修饰符。
// ES5的source属性 // 返回正则表达式的正文 /abc/ig.source // "abc" // ES6的flags属性 // 返回正则表达式的修饰符 /abc/ig.flags // 'gi'
\p表示反向匹配,即匹配不满足条件的字符。
// 匹配所有数字 const regex = /^\p{Number}+$/u; regex.test('²³¹¼½¾') // true regex.test('㉛㉜㉝') // true regex.test('ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫ') // true