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延迟加载
Mar 09 Javascript
window.onload 加载完毕的问题及解决方案(上)
Jul 09 Javascript
Javascript 类、命名空间、代码组织代码
Jul 31 Javascript
用正则表达式替换图片地址img标签
Nov 22 Javascript
JQuery EasyUI 数字格式化处理示例
May 05 Javascript
JavaScript模板引擎用法实例
Jul 10 Javascript
javascript实现在指定元素中垂直水平居中
Sep 13 Javascript
总结JavaScript中布尔操作符||与&amp;&amp;的使用技巧
Nov 17 Javascript
基于jQuery实现表格内容的筛选功能
Aug 21 Javascript
Angularjs的$http异步删除数据详解及实例
Jul 27 Javascript
koa+mongoose实现简单增删改查接口的示例代码
May 13 Javascript
在layui中对table中的数据进行判断(0、1)转换为提示信息的方法
Sep 28 Javascript
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
给初学PHP的5个入手程序
2006/11/23 PHP
深入解析PHP内存管理之谁动了我的内存
2013/06/20 PHP
PHP中使用sleep造成mysql读取失败的案例和解决方法
2014/08/21 PHP
PHP面向对象之后期静态绑定功能介绍
2015/05/18 PHP
WordPress中查询文章的循环Loop结构及用法分析
2015/12/17 PHP
CI框架实现cookie登陆的方法详解
2016/05/18 PHP
功能强大的php分页函数
2016/07/20 PHP
PHP基于面向对象实现的留言本功能实例
2018/04/04 PHP
细说浏览器特性检测(2)-通用事件检测
2010/11/05 Javascript
Javascript基础教程之数据类型 (数值 Number)
2015/01/18 Javascript
Angular中的Promise对象($q介绍)
2015/03/03 Javascript
jQuery form 表单验证插件(fieldValue)校验表单
2016/01/24 Javascript
简单的jQuery banner图片轮播实例代码
2016/03/04 Javascript
AngularJS 简单应用实例
2016/07/28 Javascript
js实现表单提交后不重新刷新当前页面
2016/11/30 Javascript
JS实现颜色梯度与渐变效果完整实例
2016/12/30 Javascript
JS 中使用Promise 实现红绿灯实例代码(demo)
2017/10/20 Javascript
详解webpack模块化管理和打包工具
2018/04/21 Javascript
js变量值传到php过程详解 将php解析成数据
2019/06/26 Javascript
jQuery 函数实例分析【函数声明、函数表达式、匿名函数等】
2020/05/19 jQuery
vuex中store存储store.commit和store.dispatch的用法
2020/07/24 Javascript
JavaScript代码实现微博批量取消关注功能
2021/02/05 Javascript
python 正则式 概述及常用字符
2009/05/07 Python
使用Python压缩和解压缩zip文件的教程
2015/05/06 Python
Python的dict字典结构操作方法学习笔记
2016/05/07 Python
python3.6 tkinter实现屏保小程序
2019/07/30 Python
django 基于中间件实现限制ip频繁访问过程详解
2019/07/30 Python
Tkinter中复选菜单是否被选中的判断与设置方式
2020/03/04 Python
Python3如何实现Win10桌面自动切换
2020/08/11 Python
NFL加拿大官方网上商店:NHLShop.ca
2019/03/12 全球购物
Silk Therapeutics官网:清洁、抗衰老护肤品
2020/08/12 全球购物
《七颗钻石》教学反思
2014/02/28 职场文书
2014年个人业务工作总结
2014/11/17 职场文书
商场广播稿范文
2015/08/19 职场文书
2019大学生实习报告
2019/06/21 职场文书
基于Redis的List实现特价商品列表功能
2021/08/30 Redis