【ES6】正则表达式的拓展
- 一、什么是正则表达式
- 二、正则表达式常用技术介绍
- 1)正则表达式的写法
- I. 修饰符
- II. 匹配模式
- 2)正则表达式的RegExp对象
- 3)正则表达式的常用JS接口
- 三、ES6新增正则表达式功能特性
- 1)RegExp对象的拓展
- I.构造函数的拓展
- II.RegExp对象属性的拓展
- III.RegExp对象方法的拓展
- 2)修饰符的拓展
- I. u修饰符
- II. i修饰符
- III. y修饰符
- 查看更多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(' 标签:ES6,匹配,正则表达式,修饰符,拓展,test,RegExp From: https://blog.51cto.com/u_15942590/6010763