【ES6】正则表达式的拓展


引言:ES6增强了正则表达式的接口和一些性能,部分原因是ES6加强了对Unicode的支持,拓展了字符串对象。

在介绍 ES6的正则表达式的拓展之前,我们先来复习一下,正则表达式和它的语法。

一、什么是正则表达式

        正则表达式(英语:Regular Expression,在代码中常简写为regex、regexp或RE)使用单个字符串来描述、匹配一系列符合某个句法规则的字符串搜索模式。
        搜索模式可用于文本搜索和文本替换。

  • 正则表达式是由一个字符序列形成的搜索模式。
  • 当你在文本中搜索数据时,你可以用搜索模式来描述你要查询的内容。
  • 正则表达式可以是一个简单的字符,或一个更复杂的模式。
  • 正则表达式可用于所有文本搜索和文本替换的操作。

语法

/正则表达式主体/修饰符(可选)

实例

var rex=/[a-z]/i;

实例解析
/[a-z]/i 是一个正则表达式。
[a-z] 是一个正则表达式主体 (用于检索),也是一种匹配模式。
i 是一个修饰符 ,i的含义是:不区分大小写。

二、正则表达式常用技术介绍

1)正则表达式的写法

I. 修饰符

修饰符可以在全局搜索中不区分大小写:

修饰符描述
i执行对大小写不敏感的匹配。
g执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。
m执行多行匹配。
II. 匹配模式

方括号用于查找某个范围内的字符:

表达式描述
[abc]查找方括号之间的任何字符。
[0-9]查找任何从 0 至 9 的数字。
(x|y)查找任何以 | 分隔的选项。

元字符是拥有特殊含义的字符:

元字符描述
\d查找数字。
\s查找空白字符。
\b匹配单词边界。
\uxxxx查找以十六进制数 xxxx 规定的 Unicode 字符。

量词:

量词描述
n+匹配任何包含至少一个 n 的字符串。
n*匹配任何包含零个或多个 n 的字符串。
n?匹配任何包含零个或一个 n 的字符串。

2)正则表达式的RegExp对象

        简单来说,对于定义正则表达式的模式var rex=/[a-z]/g;等价于var rex=new RegExp("[a-z]",“g”);
        RegExp对象还有一些属性和方法,这里只介绍test()方法和exec()方法:

  • test()方法用于检测一个字符串是否匹配某个模式,如果字符串中含有匹配的文本,则返回 true,否则返回 false。
  • exec() 方法用于检索字符串中的正则表达式的匹配。该方法返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。

3)正则表达式的常用JS接口

  • search() : 用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,并返回子串的起始位置。
  • replace() : 用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。

三、ES6新增正则表达式功能特性

1)RegExp对象的拓展

I.构造函数的拓展

        在ES5中,RegExp对象的构造函数只接受字符串作为参数:var rex=new RegExp(“xyz”,“g”);
        在ES6中,允许RegExp构造函数接受正则表达式作为参数,这是返回值就是这个正则表达式:var rex=new RegExp(/xyz/g);

II.RegExp对象属性的拓展
  • sticky属性:表示是否设置了y修饰符,返回布尔值。
  • flags属性:返回正则表达式的修饰符。
III.RegExp对象方法的拓展

        字符串对象一共有4个方法可以使用正则表达式:match()、replace()、search()、split()
        ES6将这4个方法在语言内部全部调用RegExp的实例方法。

2)修饰符的拓展

I. u修饰符

        ES6对正则表达式添加了u修饰符,含义为“Unicode模式”,用来处理大于\uFFFF的Unicode字符。也就是说,可以正确处理4个字符的UTF-16编码,即一个中文汉字。

/\u{61}/.test('a'); // false
/\u{61}/u.test('a'); // true
/\u{20bb7}/u.test('𠮷'); // true

/a{2}/.test('aa'); // true
/a{2}/u.test('aa'); // true
/𠮷{2}/.test('𠮷𠮷'); // false
/𠮷{2}/u.test('𠮷𠮷'); // true

/^\u{3}$/.test('uuu'); // true
II. i修饰符

        有些Unicode字符的编码不同,但是字型很像,比如,\u004b和\u212a都是大写字母K。

/[a-z]/i.test('\u212a'); // false
/[a-z]/iu.test('\u212a'); // true

        如果不加u修饰符,就是别不出来非规范的K字符。

III. y修饰符

        “粘粘”(sticky)修饰符y。
        y修饰符与g修饰符类似,也是全局匹配。不同之处在于,g是全局查找,没有则停止。y是从字符串第一位查找,如果第一位不符合匹配的模式,立马停止。

var s="_aa_a";
var rex1=/a+/g;
var rex2=/a+/y;

rex1.exec(s) // ["aa"]
rex2.exec(s) // null

查看更多ES6教学文章:

1. 【ES6】let与const 详解
2. 【ES6】变量的解构赋值
3. 【ES6】字符串的拓展
4. 【ES6】正则表达式的拓展
5. 【ES6】数值的拓展
6. 【ES6】数组的拓展
7. 【ES6】函数的拓展
8. 【ES6】对象的拓展
9. 【ES6】JS第7种数据类型:Symbol
10. 【ES6】Proxy对象
11. 【ES6】JS的Set和Map数据结构
12. 【ES6】Generator函数详解
13. 【ES6】Promise对象详解
14. 【ES6】异步操作和async函数
15. 【ES6】JS类的用法class
16. 【ES6】Module模块详解
17. 【ES6】ES6编程规范 编程风格

参考文献

阮一峰 《ES6标准入门(第2版)》

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

征途黯然.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值