ES6躬行记(10)——正则表达式
在ES5中,如果使用构造函数RegExp()初始化RegExp对象(即正则表达式),并且它的第一个参数是正则表达式时,那么不允许再传入标志字符串(即第二个参数)。而ES6更改了这项限制,如果传入了第二个参数,那么就会取代第一个参数中的标志,如下所示。
var reg = new RegExp(/\w/g, "i"); reg.toString(); //"/\w/i"
一、u标志
由于正则表达式无法正确处理辅助平面中的Unicode字符,因此ES6新增了u标志,使其能够处理两个编码单元的字符。依然以字符“?”为例,下面是两条正则表达式的匹配语句,返回的结果都是false。
var word = "?"; /^.$/.test(word); //false /\u{20BB3}/.test(word); //false
第一条匹配语句中的元字符“.”表示除换行符之外的任意字符,但只能匹配一个字符,而“?”却会被当成两个字符来对待,因此匹配失败;第二条匹配语句中使用了Unicode转义字符的新形式,但正则表达式会将花括号中的内容识别成量词,因此匹配也失败。下面的代码会为两个正则表达式添加u标志,此时就能成功匹配。
/^.$/u.test(word); //true /\u{20BB3}/u.test(word); //true
ES6还为正则表达式增加了一个只读的布尔属性:unicode,指示正则表达式是否携带了u标志。
二、y标志
此标志也叫粘性(sticky)标志,当正则表达式中携带y标志时,匹配会从lastIndex属性指定的位置开始。与g标志不同,如果在起始处的第一个位置没有匹配成功,那么就会终止匹配,下面演示了这两个标志的区别。
var str = "pw1st2pw3", pattern1 = /pw\d/g, pattern2 = /pw\d/y; pattern1.test(str); //true pattern2.test(str); //true pattern1.test(str); //true pattern2.test(str); //false
示例中的两个正则表达式分别携带g和y标志,用于匹配“pw”后跟一个数字,各自调用了两次test()方法,在第二次调用时都会更新lastIndex属性的值,此时得到了两个不同的结果。
ES6也为正则表达式增加了一个用于标识是否携带y标志的布尔属性:sticky,与unicode属性一样也是只读的。
三、flags属性
在ES5的时代,只能通过正则表达式的source属性得到模式规则,而ES6新增的flags属性还可以获取到它所携带的标志,但要注意,返回的值得按“gimuy”的顺序排列。这两个都是只读属性,具体使用如下所示。
var pattern = /pw\d/img; pattern.source; //"pw\d" pattern.flags; //"gim"
相关文章
- 大厂面试:求解集装箱港口翻箱问题的最短路径
- 4种方法帮你解决IntelliJ IDEA控制台中文乱码问题
- 万字长文:解读区块链7类共识算法
- 厉害了!这群95后正在用三维成像技术让科幻变成现实
- 华为云FusionInsight MRS在金融行业存算分离的实践
- 架构的变迁,从分层架构先聊起
- 当自动驾驶遇到5G,会擦出怎样的火花?这篇文章说明白了
- 有了这个算法,图像上文字擦除再也用不上PS了
- 从架构设计理念到集群部署,全面认识KubeEdge
- 如何极速极速搭建个人博客?Copy攻城狮用的这一招很优秀!
- 逼疯UE设计师,不可不知的提升产品用户体验的10个测试方法
- KubeEdge在国家工业互联网大数据中心的架构设计与应用
- CSS开发过程中的20个快速提升技巧
- 看KubeEdge携手K8S,如何管理中国高速公路上的10万边缘节点
- redis分布式锁的这些坑,我怀疑你是假的开发
- 【任务悬赏】就地过年,原地充电,华为云社区喊你拿新年红包啦!
- 探索语言交互技术在政务数字化的应用
- 面试官:请讲一下Redis主从复制的功能及实现原理
- KubeEdge@MEC:Kubernetes容器生态与5G的结合
- 一文搞懂浏览器同源策略