ES6正则表达式的一些新功能总结

ES6正则表达式的一些新功能总结

ES6为正则表达式新增了很多功能,包括修饰符、断言、Unicode支持等等。下面详细介绍一下ES6正则表达式的新功能。

修饰符

ES6新增了两个修饰符:u 和 y。

u 修饰符

u 修饰符用于处理 Unicode 字符,可以正确处理四个字节的 UTF-16 编码。

示例:

/^\uD83D/u.test('\uD83D\uDC2A') // true
/^\uD83D/.test('\uD83D\uDC2A') // false

上面代码中,如果不加 u 修饰符,正则表达式就会认为字符串为两个字符,从而匹配失败。

y 修饰符

y 修饰符类似于 g 修饰符,都是全局匹配。不同之处在于,y 修饰符要求匹配必须从剩余的第一个位置开始,并且如果后面不匹配,就不再尝试往下匹配。

示例:

var s = 'aaa_aa_a';
var r1 = /a+/g;
var r2 = /a+/y;

r1.exec(s) // ["aaa"]
r2.exec(s) // ["aaa"]

r1.exec(s) // ["aa"]
r2.exec(s) // null

上面代码中,第二次执行 r2.exec(s) 返回 null,因为只从剩余的第一个位置开始匹配,而 aaa 已经匹配过了,剩余的字符串不是下划线开头,所以匹配失败。

断言

断言用来匹配字符串的位置,ES6新增了先行断言和后行断言两种断言方式。

先行断言

先行断言(Lookahead)指在匹配规则中加入一个问号和等号(?=),表示所匹配的内容必须在特定字符串之前。

示例:

const text = 'hello world';
const regex = /hello(?=\sworld)/;
console.log(regex.test(text)); // true

上面代码中,?=\sworld 表示匹配 hello 之后必须紧跟一个空格,而后面跟着的 world 不被匹配。

后行断言

后行断言(Lookbehind)指在匹配规则中加入一个问号和小于符号(?<=),表示所匹配的内容必须在特定字符串之后。

示例:

const text = 'a1b2c3d4';
const regex = /(?<=[a-z]\d)b/g;
console.log(text.match(regex)); // ['b']

上面代码中,匹配规则中的 ?<=[az]\d 表示要匹配的内容前面必须是一个小写字母和数字组成的字符,因此 b 才被匹配。

Unicode 支持

ES6 新增了对 Unicode 字符的支持,可以使用 u 修饰符解析 Unicode 编码。

示例:

const text = '你好?';
const regex = /\uD83D/u;
console.log(regex.test(text)); // true
console.log(regex.test(text[2])); // false

上面代码中,变量 text 存储的字符串中,第三个字节是一个 Unicode 表情符号,只有使用 u 修饰符解析后才能被正确匹配。

结论

ES6为正则表达式添加了许多有用的功能,可以更好地支持处理 Unicode 码点,提供更好的全局匹配能力以及增强了定位的能力。我们可以在实际使用中逐步地熟悉和应用它们。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:ES6正则表达式的一些新功能总结 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • bigdecimal乘法保留两位小数

    以下是“BigDecimal乘法保留两位小数”的完整攻略: BigDecimal乘法保留两位小数 在Java中,可以使用BigDecimal类来进行高精度计算。本攻略将介绍如何使用BigDecimal类进行乘法运算,并保留两位小数。 步骤1:创建BigDecimal对象 首先,您需要创建两个BigDecimal对象,表示要进行乘法运算的两个数。以下是创建Bi…

    other 2023年5月7日
    00
  • 不升级都不行 Windows 10 Build 10074版下载地址(32位/64位)

    不升级都不行 Windows 10 Build 10074版下载地址(32位/64位)攻略 Windows 10 Build 10074是Windows 10操作系统的一个早期版本,如果你想尝试这个版本,下面是一个详细的攻略,包含了下载地址和两个示例说明。 下载地址 你可以从以下链接下载Windows 10 Build 10074的32位和64位版本: 32…

    other 2023年8月4日
    00
  • crontab每小时运行一次(转)

    crontab每小时运行一次(转) 作为一个网站站长,我们需要经常执行一些脚本或者程序来保证我们的网站能够正常运行。在这个过程中,我们通常会使用到Linux系统的计划任务工具-crontab来实现自动化。 在这篇文章中,我们将介绍如何使用crontab每小时运行一次来执行一个脚本。 什么是crontab Crontab是一种计划任务管理器,它可以在指定的时间…

    其他 2023年3月29日
    00
  • C/C++实现segy文件的读取详解

    C/C++实现segy文件的读取详解 背景知识 SEGY文件是地震勘探中的一种数据格式,常用于地震波形数据的存储、传输和处理。SEGY文件的数据结构是按二进制格式排列的,因此需要用二进制读写的方式进行操作。 读取SEGY文件的过程 打开SEGY文件 可以使用C/C++中标准的文件操作函数fopen()打开SEGY文件,此函数返回一个文件指针(FILE *fp…

    other 2023年6月26日
    00
  • Java超详细讲解多态的调用

    下面我来详细讲解一下“Java超详细讲解多态的调用”。 什么是多态 多态是面向对象编程的一个重要特性,它允许使用同一个父类引用来引用不同的子类对象,可以大大提高代码的可扩展和可维护性。 多态的调用方式 静态绑定 在编译期间,Java编译器会根据变量的声明类型来确定对应调用的方法,这种方式被称为“静态绑定”。例如: public class Animal { …

    other 2023年6月26日
    00
  • Python寻找两个有序数组的中位数实例详解

    Python寻找两个有序数组的中位数实例详解 问题描述 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。请找出两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m+n))。 思路分析 思路分为两步: 将两个有序数组合并成一个数组,再找该数组的中位数。 直接在两个有序数组中查找中位数。 第一种思路时间复杂度为 O(m+n),不能…

    other 2023年6月27日
    00
  • Java数据结构之二叉搜索树详解

    我为您详细讲解“Java数据结构之二叉搜索树详解”的完整攻略。 什么是二叉搜索树? 二叉搜索树(Binary Search Tree,简称BST)是一种特殊的二叉树,它的每个节点最多有两颗子树,左子树元素均小于当前节点元素,右子树元素均大于当前节点元素,左右子树都是二叉搜索树。 二叉搜索树的优点在于能够提供进行二分查找的能力,对于动态集合的数据操作,二叉搜索…

    other 2023年6月27日
    00
  • 驱动精灵Realtek音频驱动更新重启一次便可完成

    下面是关于“驱动精灵Realtek音频驱动更新重启一次便可完成”的完整攻略: 1. 下载驱动精灵并安装 首先需要下载一支电脑驱动更新工具,这里推荐驱动精灵,它可以自动扫描并更新电脑驱动,非常方便。安装驱动精灵的过程比较简单,你可以在官网下载安装程序,然后按照提示进行安装即可。 2. 扫描并更新Realtek音频驱动 安装好驱动精灵之后,打开它,选择“驱动更新…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部