ES6正则表达式的一些新功能总结


Posted in Javascript onMay 09, 2017

本文主要总结了ES6正则表达式的一些新功能,分享出来供大家参考学习,下面来看看详细的介绍:

一、构造函数实例化参数的变化

大家都知道,在ES5中,new RegExp(参数1,参数2),参数1若是指定了正则修饰符,则参数2就不应该出现,否则将会报错,在ES6中,第二个参数的正则修饰符会覆盖掉原有的修饰符:

<script>
//在ES5中,下面的正则自带修饰符ig,则第二个参数不能出现
var reg = new RegExp(/asd/ig);
//在ES6中,如下:
var reg = new RegExp(/asd/ig,'i');
//i会覆盖掉原来的ig
</script>

二、u修饰符

u修饰符可以自动识别码点大于0xFFFF的编码。只是ES6的新增内容!

<script>
/\uD83D/u.test("\uD83D\uDC2A");
//在ES6中会返回false,u修饰符默认处理的UTF-16编码
/\uD83D/.test("\uD83D\uDC2A");
//在ES5中会将test的的参数拆分成两个字符,返回true
</script>

另外使用u修饰符需要注意一下几点:

1. “.”字符

在正则表达式中,.字符的含义是除了换行符以外的所有字符,如要.字符匹配码点大于\uFFFF的字符,必须带u修饰符,否则不能正常识别;

<svcipt>
var s = "��";
//在ES5中
/^.$/.test(s)//false
//在ES6中
/^.$/u.test(s)//true
</script>

2.Unicode字符表示法

ES6中新增使用了大括号表示Unicode字符,这种方法在正则表达式中必须加上u修饰符才能识别。

<svcipt>
//在ES5中,61会被当做量词使用
/\u{61}/.test("a")//false
//在ES6中
/\u{61}/u.test("a")//true
</script>

3.预定义模式

u修饰符也影响到预定义模式,加了u修饰符,才能正确识别码点大于0xFFFF的Unicode字符。

4.对i修饰符的影响

有些Unicode编码的字符比较接近,比如大写的K的编码有\u004B和\u212A,

<svcipt>
//未添加u修饰
/[a-z]/.test("\u212A")//false
//添加u修饰
/[a-z]/iu.test("\u212A")//true
</script>

三、y修饰符

ES6还新增了一个y修饰符,与通常的g修饰符用法类似,都是用来全局匹配,不同的是y修饰符又叫做“粘连”修饰符,在上一次匹配成功的下一个位置开始匹配,但是下一次开始位置必须要能够满足匹配,也就是匹配从剩余的第一个位置开始,这就是“粘连”的含义(个人理解)吧。

举个例子吧!

<svcipt>
var s = qqqq_q_qq;
var r1 = /q+/g;
var r2 = /q+/y
//第一次匹配
r1.exec(s)//["qqqq"]
r2.exec(s)//["qqqq"]
//第二次匹配
r1.exec(s)//["qqq"]
r2.exec(s)//null
</script>

注意:y修饰符隐含了头部匹配的标志^

/a/.exec("bdab");//null
/a/.exec("abbd");//["a"]

开头必须匹配上

四、新增属性

1.sticky属性

      判断正则是否设置了y修饰符。

      返回布尔值。

2.flags属性

      返回正则的修饰符

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
JavaScript定义类的几种方式总结
Jan 06 Javascript
javascript模拟php函数in_array
Apr 27 Javascript
jquery仿百度百科底部浮动导航特效
Aug 08 Javascript
AngularJS 与百度地图的结合实例
Oct 20 Javascript
Node.js Sequelize如何实现数据库的读写分离
Oct 23 Javascript
JSP防止网页刷新重复提交数据的几种方法
Nov 19 Javascript
Vue.js如何优雅的进行form validation
Apr 07 Javascript
在Vue中使用echarts的实例代码(3种图)
Jul 10 Javascript
一个简易的js图片轮播效果
Jul 22 Javascript
JavaScript中click和onclick本质区别与用法分析
Jun 07 Javascript
JS获取子节点、父节点和兄弟节点的方法实例总结
Jul 06 Javascript
jQuery实现购物车的总价计算和总价传值功能
Nov 28 jQuery
Vuex和前端缓存的整合策略详解
May 09 #Javascript
基于JS实现限时抢购倒计时间表代码
May 09 #Javascript
js使用i18n实现页面国际化的方法
May 09 #Javascript
Angular中$state.go页面跳转并传递参数的方法
May 09 #Javascript
Vue 2.0中生命周期与钩子函数的一些理解
May 09 #Javascript
JavaScript中splice与slice的区别
May 09 #Javascript
详解node中创建服务进程
May 09 #Javascript
You might like
DedeCMS dede_channeltype表字段注释
2010/04/07 PHP
php 数组的指针操作实现代码
2011/02/08 PHP
php 广告调用类代码(支持Flash调用)
2011/08/11 PHP
第七章 php自定义函数实现代码
2011/12/30 PHP
php获取表单中多个同名input元素的值
2014/03/20 PHP
PHP判断FORM表单或URL参数来的数据是否为整数的方法
2016/03/25 PHP
thinkphp框架page类与bootstrap分页(美化)
2017/06/25 PHP
php使用环形链表解决约瑟夫问题完整示例
2018/08/07 PHP
在Laravel的Model层做数据缓存的实现
2019/09/26 PHP
PHP pthreads v3在centos7平台下的安装与配置操作方法
2020/02/21 PHP
Node.js开发之访问Redis数据库教程
2015/01/14 Javascript
JS仿淘宝实现的简单滑动门效果代码
2015/10/14 Javascript
JS实现json的序列化和反序列化功能示例
2017/06/13 Javascript
Vue无限滑动周选择日期的组件的示例代码
2018/07/18 Javascript
javascript设计模式 ? 简单工厂模式原理与应用实例分析
2020/04/09 Javascript
vue渲染方式render和template的区别
2020/06/05 Javascript
[04:50]2019DOTA2高校联赛秋季赛四强集锦
2019/12/27 DOTA
python实现的MySQL增删改查操作实例小结
2018/12/19 Python
python广度优先搜索得到两点间最短路径
2019/01/17 Python
pandas分区间,算频率的实例
2019/07/04 Python
Django框架创建mysql连接与使用示例
2019/07/29 Python
Django框架之中间件MiddleWare的实现
2019/12/30 Python
Pytorch实现LSTM和GRU示例
2020/01/14 Python
python实现逢七拍腿小游戏的思路详解
2020/05/26 Python
浅谈numpy中函数resize与reshape,ravel与flatten的区别
2020/06/18 Python
Python3 搭建Qt5 环境的方法示例
2020/07/16 Python
Trunki英国官网:儿童坐骑式行李箱
2017/05/30 全球购物
桥梁与隧道工程专业本科生求职信
2013/10/08 职场文书
医学生求职自荐信
2013/10/25 职场文书
初二政治教学反思
2014/01/12 职场文书
中学生获奖感言
2014/02/04 职场文书
公司会计岗位职责
2014/02/13 职场文书
餐厅楼面部长岗位职责范文
2014/02/16 职场文书
供电工程专业求职信
2014/08/09 职场文书
幼儿园小班班务总结
2015/08/03 职场文书
考研经验交流会策划书
2015/11/02 职场文书