脚本宝典收集整理的这篇文章主要介绍了ECMAScript6 新特性——“正则的扩展”,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
1 RegExp构造函数
ES6 允许RegExp构造函数接受正则表达式作为参数。第二个参数指定修饰符,如果存在则使用指定的修饰符。
VAR regexp = new RegExp(/xyz/i, "ig");
console.LOG(regexp.flags); //gi
2 字符串的正则方法
字符串对象的4个使用正则表达式的方法: match()
,replace()
,seArch()
,splIT()
这四个方法全部调用RegExp的实例的方法。
3 u修饰符
ES6对正则表达式添加了u修饰符,含义为“Unicode模式”,用来正确处理大于uFFFF的Unicode字符;
/^uD83D/u.test('uD83DuDC2A')
// false
/^uD83D/.test('uD83DuDC2A')
// true
一旦加上u修饰符号,就会修改下面这些正则表达式的行为:
点字符
点(.)字符不能识别码点大于0xFFFF的Unicode字符,必须加上u修饰符。
var s = '?';
/^.$/.test(s) // false
/^.$/u.test(s) // true
Unicode字符表示法
大括号表示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
预定义模式
u修饰符也影响到预定义模式
/^S$/.test('?') // false
/^S$/u.test('?') // true
i修饰符
有些Unicode字符的编码不同,但是字型很相近,比如,u004B与u212A都是大写的K。
/[a-z]/i.test('u212A') // false
/[a-z]/iu.test('u212A') // true
4 y修饰符
除了u修饰符,ES6还为正则表达式添加了y修饰符,叫做“粘连”(sticky)修饰符。
y修饰符的作用与g修饰符类似,不同之处在于,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
5 sticky属性
表示是否设置了y修饰符
6 flags属性
// ES5的source属性
// 返回正则表达式的正文
/abc/ig.source
// "abc"
// ES6的flags属性
// 返回正则表达式的修饰符
/abc/ig.flags
// 'gi'
7 RegExp.escape()
字符串必须转义,才能作为正则模式。
function escaPERegExp(str) {
return str.replace(/[-[]/{}()*+?.\^$|]/g, '\$&');
}
let str = '/path/to/resource.htML?search=query';
escapeRegExp(str)
// "/path/to/resource.html?search=query"
上面的代码和垫片模块regexp.escape都可以https://github.COM/ljharb/regexp.escape
以上是脚本宝典为你收集整理的ECMAScript6 新特性——“正则的扩展”全部内容,希望文章能够帮你解决ECMAScript6 新特性——“正则的扩展”所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。