0
点赞
收藏
分享

微信扫一扫

【ES6】正则表达式的拓展


【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('𠮷'); // 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标准入门(第2版)》


举报

相关推荐

0 条评论