您的位置:首页 > Web前端 > JavaScript

ES6学习(二)正则的扩展

2017-12-31 23:59 260 查看

一、RegExp 构造函数

在 ES5 中,RegExp构造函数的参数有两种情况

①let regex = new RegExp('xyz', 'i'); //第一个参数是字符串,第二个参数表示正则表达式的修饰符(flag)
②let regex2 = new RegExp(/xyz/i); //参数是一个正则表示式
在这种情况下,ES5 不允许此时使用第二个参数添加修饰符,否则会报错。例如var regex2 = new RegExp(/xyz/, 'i')这种写法,就会报错。
console.log(regex.test('xyz123'),regex2.test('xyz123'));// true true


在ES6中改善了这种写法,如果RegExp构造函数第一个参数是一个正则对象,那么可以使用第二个参数指定修饰符。而且,返回的正则表达式会忽略原有的正则表达式的修饰符,只使用新指定的修饰符。

let regex3 = new RegExp(/abc/ig, 'i');
console.log(regex3.flags);ES6 为正则表达式新增了flags属性,会返回正则表达式的修饰符 //原有正则对象的修饰符是ig,它会被第二个参数i覆盖,最后得到结果是i


二、y修饰符

y修饰符和g修饰符都是全局匹配,不同之处在于,g修饰符只要剩余位置中存在匹配就可,而y修饰符确保匹配必须从剩余的第一个位置开始

let s = 'bbbb_bbb_bb_b';
var a1 = /b+/g;
var a2 = /b+/y;
console.log(a1.exec(s), a2.exec(s)); // ["bbbb"],["bbbb"]
console.log(a1.exec(s), a2.exec(s)); // ["bbb"],null   y修饰符必须要求是b开头的,所以导致匹配失败
console.log(a1.sticky, a2.sticky); //判断是否开启了Y修饰符模式


三、u修饰符

u修饰符,含义为“Unicode 模式”,用来正确处理大于\uFFFF的 Unicode 字符。也就是说,会正确处理四个字节的 UTF-16 编码。

console.log('u修饰符',/^\uD83D/.test('\uD83D\uDC2A')); // true  \uD83D\uDC2A是一个四个字节的 UTF-16 编码,代表一个字符。但是,ES5 不支持四个字节的 UTF-16 编码,会将其识别为两个字符,导致第二行代码结果为true
console.log('u修饰符',/^\uD83D/u.test('\uD83D\uDC2A')); // false 加了u修饰符以后,ES6 就会识别其为一个字符,所以第一行代码结果为false。


Unicode 字符表示法

/\u{61}/.test('a') // false 匹配 61 个连续的u
/\u{61}/u.test('a') // true


ES6 新增了使用大括号表示 Unicode 字符,这种表示法在正则表达式中必须加上u修饰符,才能识别当中的大括号,否则会被解读为量词。

参考:http://es6.ruanyifeng.com/#docs/regex
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息