ES6正则表达式的一些新功能总结
ES6为正则表达式新增了很多功能,包括修饰符、断言、Unicode支持等等。下面详细介绍一下ES6正则表达式的新功能。
修饰符
ES6新增了两个修饰符:u 和 y。
u 修饰符
u 修饰符用于处理 Unicode 字符,可以正确处理四个字节的 UTF-16 编码。
示例:
/^\uD83D/u.test('\uD83D\uDC2A') // true
/^\uD83D/.test('\uD83D\uDC2A') // false
上面代码中,如果不加 u 修饰符,正则表达式就会认为字符串为两个字符,从而匹配失败。
y 修饰符
y 修饰符类似于 g 修饰符,都是全局匹配。不同之处在于,y 修饰符要求匹配必须从剩余的第一个位置开始,并且如果后面不匹配,就不再尝试往下匹配。
示例:
var s = 'aaa_aa_a';
var r1 = /a+/g;
var r2 = /a+/y;
r1.exec(s) // ["aaa"]
r2.exec(s) // ["aaa"]
r1.exec(s) // ["aa"]
r2.exec(s) // null
上面代码中,第二次执行 r2.exec(s) 返回 null,因为只从剩余的第一个位置开始匹配,而 aaa 已经匹配过了,剩余的字符串不是下划线开头,所以匹配失败。
断言
断言用来匹配字符串的位置,ES6新增了先行断言和后行断言两种断言方式。
先行断言
先行断言(Lookahead)指在匹配规则中加入一个问号和等号(?=),表示所匹配的内容必须在特定字符串之前。
示例:
const text = 'hello world';
const regex = /hello(?=\sworld)/;
console.log(regex.test(text)); // true
上面代码中,?=\sworld 表示匹配 hello 之后必须紧跟一个空格,而后面跟着的 world 不被匹配。
后行断言
后行断言(Lookbehind)指在匹配规则中加入一个问号和小于符号(?<=),表示所匹配的内容必须在特定字符串之后。
示例:
const text = 'a1b2c3d4';
const regex = /(?<=[a-z]\d)b/g;
console.log(text.match(regex)); // ['b']
上面代码中,匹配规则中的 ?<=[az]\d 表示要匹配的内容前面必须是一个小写字母和数字组成的字符,因此 b 才被匹配。
Unicode 支持
ES6 新增了对 Unicode 字符的支持,可以使用 u 修饰符解析 Unicode 编码。
示例:
const text = '你好?';
const regex = /\uD83D/u;
console.log(regex.test(text)); // true
console.log(regex.test(text[2])); // false
上面代码中,变量 text 存储的字符串中,第三个字节是一个 Unicode 表情符号,只有使用 u 修饰符解析后才能被正确匹配。
结论
ES6为正则表达式添加了许多有用的功能,可以更好地支持处理 Unicode 码点,提供更好的全局匹配能力以及增强了定位的能力。我们可以在实际使用中逐步地熟悉和应用它们。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:ES6正则表达式的一些新功能总结 - Python技术站