本文实例讲述了ES6正则的扩展。分享给大家供大家参考,具体如下:
1. RegExp构造函数
ES5中,RegExp构造函数的参数:
参数是字符串,这时第二个参数表示正则表达式的修饰符(flag)
参数是一个正则表示式,这时会返回一个原有正则表达式的拷贝。但是,ES5不允许此时使用第二个参数,添加修饰符,否则会报错。
ES6改变了这种行为。如果RegExp构造函数第一个参数是一个正则对象,那么可以使用第二个参数指定修饰符。而且,返回的正则表达式会忽略原有的正则表达式的修饰符,只使用新指定的修饰符。
2. 字符串的正则表达式
字符串对象共有4个方法,可以使用正则表达式:match()、replace()、search()和split()。
ES6将这4个方法,在语言内部全部调用RegExp的实例方法,从而做到所有与正则相关的方法,全都定义在RegExp对象上。
String.prototype.match
调用 RegExp.prototype[Symbol.match]String.prototype.replace
调用 RegExp.prototype[Symbol.replace]String.prototype.search
调用 RegExp.prototype[Symbol.search]String.prototype.split
调用 RegExp.prototype[Symbol.split]
3. u修饰符
ES6对正则表达式添加了u修饰符,含义为“Unicode模式”,用来正确处理大于/uFFFF的Unicode字符。
也就是说,会正确处理四个字节的UTF-16编码。对于码点大于0xFFFF的Unicode字符,点字符不能识别,必须加上u修饰符。
ES6新增了使用大括号表示Unicode字符,这种表示法在正则表达式中必须加上u修饰符,才能识别。
//u{61}/.test('a') // false//u{61}/u.test('a') // true//u{20BB7}/u.test('𠮷') // true
①.点字符
点(.)字符在正则表达式中,含义是除了换行符以外的任意单个字符。对于码点大于0xFFFF的Unicode字符,点字符不能识别,必须加上u修饰符。
var s = '';/^.$/.test(s) // false/^.$/u.test(s) // true
上面代码表示,如果不添加u修饰符,正则表达式就会认为字符串为两个字符,从而匹配失败。
②. 量词
使用u修饰符后,所有量词都会正确识别码点大于0xFFFF的Unicode字符。
/a{2}/.test('aa') // true/a{2}/u.test('aa') // true/ {2}/.test(' ') // false/ {2}/u.test(' ') // true
另外,只有在使用u修饰符的情况下,Unicode表达式当中的大括号才会被正确解读,否则会被解读为量词。
/^/u{3}$/.test('uuu') // true
上面代码中,由于正则表达式没有u修饰符,所以大括号被解读为量词。加上u修饰符,就会被解读为Unicode表达式。
③. 预定义模式
u修饰符也影响到预定义模式,能否正确识别码点大于0xFFFF的Unicode字符。
新闻热点
疑难解答
图片精选