ES6-正则表达式
创建正则表达式规则的四种方法
var regex = new RegExp('xyz', 'i');
var regex = new RegExp(/xyz/i);
var regex = new RegExp(/xyz/, 'i');
var regex = /xyz/i;
在es5中,RegExp构造函数的两种传参方式:第一种第一个参数是字符串,第二个参数为修饰符;第二种参数是一个正则表达式;
在es6中,RegExp构造函数允许第一个参数为正则表达式时,第二个为修饰符,覆盖正则表达式中的修饰符。
字符串的四个正则方法
match()
replace()
search()
split()
u修饰符
在es6中,新增了一个u修饰符,为了处理码点大于\uFFFF的Unicode字符(也就是说,会正确处理四个字节的UTF-16编码);\uD83D\uDC2A是一个字符,但是es5不支持四个字节的UTF-16,会将其识别成两个字符,导致第二行代码可以正确匹配到;加了u修饰符之后,es6会将其识别成一个字符。
/^\uD83D/u.test('\uD83D\uDC2A') // false
/^\uD83D/.test('\uD83D\uDC2A') // true
处理码点大于0xFFFF的Unicode字符时,要加上/u修饰符。
var s = '𠮷';
/^.$/.test(s) // false
/^.$/u.test(s) // true
若正则表达式是使用大括号表示的Unicode字符,也必须使用/u修饰符才可以识别,不然会被解释为量词。
/\u{61}/.test('a') // false
/\u{61}/u.test('a') // true
/\u{20BB7}/u.test('𠮷') // true
当使用u修饰符后,所有量词都会正确识别码点大于0xFFFF的Unicode字符。
/a{2}/.test('aa') // true
/a{2}/u.test('aa') // true
/𠮷{2}/.test('𠮷𠮷') // false
/𠮷{2}/u.test('𠮷𠮷') // true