ECMAScript6 新特性——“正则的扩展”

发布时间:2019-08-09 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了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,请注明来意。