前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ES6 正则扩展

ES6 正则扩展

作者头像
Leophen
发布2019-08-23 22:59:29
5830
发布2019-08-23 22:59:29
举报
文章被收录于专栏:Web前端开发Web前端开发

一、新增 flags 属性

ES6 为正则表达式新增了flags属性,会返回正则表达式的修饰符。

代码语言:javascript
复制
// ES5 的 source 属性
// 返回正则表达式的正文
/abc/ig.source
// "abc"
代码语言:javascript
复制
// ES6 的 flags 属性
// 返回正则表达式的修饰符
/abc/ig.flags
// 'gi'

二、构造函数的变化

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

1、参数是字符串,i 为修饰符

代码语言:javascript
复制
var regex = new RegExp('xyz', 'i');
//  等价于 var regex = /xyz/i;

2、参数是一个正则表示式,i 为修饰符

代码语言:javascript
复制
var regex = new RegExp(/xyz/i);
//  等价于 var regex = /xyz/i;

但 ES5 不允许这种情况使用第二个参数添加修饰符

代码语言:javascript
复制
var regex = new RegExp(/xyz/, 'i');
// Uncaught TypeError: Cannot supply flags when constructing one RegExp from another

ES6 改变了这种行为。若 RegExp 构造函数第一个参数是一个正则对象,那么可以使用第二个参数指定修饰符。

而且,第二个修饰符参数会覆盖原有的正则表达式的修饰符

代码语言:javascript
复制
new RegExp(/abc/ig, 'i').flags
// "i"

三、新的修饰符

1、u 修饰符

ES6 对正则表达式新增了u修饰符,含义为“Unicode 模式”,用来正确处理大于\uFFFF的 Unicode 字符。

代码语言:javascript
复制
/^\uD83D/.test('\uD83D\uDC2A') // true
/^\uD83D/u.test('\uD83D\uDC2A') // false

上面代码中,\uD83D\uDC2A 是一个四个字节的 UTF-16 编码,代表一个字符。

但 ES5 不支持四个字节的 UTF-16 编码,会将其识别为两个字符,导致第二行代码结果为true

加了u修饰符以后,ES6 将其识别其为一个字符,所以第一行代码结果为false

关于点字符 点(.)字符在正则表达式中表示除了换行符以外的任意单个字符。 但对于码点大于0xFFFF的 Unicode 字符,点字符不能识别,必须加上u修饰符。 let a = '\ud83d\udc36'; console.log(/^.$/.test(a)); // false console.log(/^.$/u.test(a)); // true

2、y 修饰符

ES6 为正则表达式新增了y修饰符 → “粘连”(sticky)修饰符。

其作用与g修饰符类似,也是全局匹配,后一次匹配都从上一次匹配成功的下一个位置开始。

不同之处在于,g修饰符只要剩余位置中存在匹配就可,而y修饰符确保匹配必须从剩余的第一个位置开始,这也就是“粘连”的涵义。

代码语言:javascript
复制
var s = 'aaa_aa';
var r1 = /a+/g;

r1.exec(s) // ["aaa"]
r1.exec(s) // ["aa"]

上面代码使用g修饰符,执行第一次后剩余字符串为_aa,由于g修饰符没有位置要求,所以第二次执行返回aa

代码语言:javascript
复制
var s = 'aaa_aa';
var r2 = /a+/y;

r2.exec(s) // ["aaa"]
r2.exec(s) // null

上面代码使用y修饰符,执行第一次后剩余字符串为_aa,由于y修饰符要求匹配必须从头部开始,所以返回null

如果改一下正则表达式,保证每次都能头部匹配,y修饰符就能返回结果了:

代码语言:javascript
复制
var s = 'aaa_aa_a';
var r3 = /a+_/y;

r3.exec(s) // ["aaa_"]
r3.exec(s) // ["aa_"]
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-07-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、新增 flags 属性
  • 二、构造函数的变化
  • 三、新的修饰符
    • 1、u 修饰符
      • 2、y 修饰符
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档