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

yizhihongxing

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日

相关文章

  • Access2010默认数字字段怎么设置成小数?

    想要将Access2010默认数字字段设置成小数,可以按照以下步骤进行操作: 打开Access 2010数据库,选择要设置小数的表格,进入表格设计模式。 在表格设计模式中,找到要设置为小数的数字字段,双击该字段,进入字段属性窗口。 在字段属性窗口中,找到“数据类型”项,选择“十进制数”或“货币”数据类型(这两种数据类型会自动设置小数位数),并根据需要设置小数…

    other 2023年6月25日
    00
  • 我的世界1.9新增内容一览 末影之地内容丰富

    我的世界1.9新增内容一览 – 末影之地 1. 末影之地简介 末影之地是《我的世界》1.9版本中新增的维度,它是一个神秘的地方,充满了危险和宝藏。在末影之地中,你将会遇到新的生物、新的方块和新的挑战。 2. 如何进入末影之地 要进入末影之地,你需要制作一枚末影之眼。末影之眼由末影珍珠和烈焰粉合成而成。使用末影之眼右键点击末地传送门,它将会飞向天空并指示末地要…

    other 2023年8月3日
    00
  • 3dtouch

    3D Touch技术——引领智能设备新时代 随着技术的不断发展和智能设备的普及,我们的生活中越来越多地使用到了触摸屏幕的方法来操作设备。而3D Touch技术的出现,则为我们带来了更多的可能性和更加优秀的使用体验。 什么是3D Touch技术 3D Touch技术是由苹果公司在2015年推出的一种新型的触摸屏交互技术。该技术可以感知用户按压屏幕的力度,从而实…

    其他 2023年3月28日
    00
  • 基于Qt实现可拖动自定义控件

    下面是基于Qt实现可拖动自定义控件的完整攻略。 1. 编写自定义控件 首先,我们需要编写自定义控件,这个控件可以是任何类型的Qt控件,比如QWidget或QLabel等。下面以QWidget为例,代码如下: class MyWidget : public QWidget { public: MyWidget(QWidget *parent = nullptr…

    other 2023年6月26日
    00
  • 25个 Git 进阶技巧(翻译)

    “25个 Git 进阶技巧(翻译)”是一篇介绍 Git 进阶使用技巧的文章,本攻略将全面解析这篇文章,为读者提供更为详细和具体的使用方法和示例。 第一部分:Git 基础命令 文章中介绍了 Git 四个基础命令:add, commit, reset 和 checkout。这四个命令是 Git 使用的核心命令,其具体解释及使用方法如下: add git add …

    other 2023年6月27日
    00
  • Android中点击事件的四种写法详解

    Android中点击事件的四种写法详解 在Android开发中,处理点击事件是非常常见的需求。Android提供了多种方式来实现点击事件的处理,下面将详细介绍四种常用的写法。 1. 在XML布局文件中设置点击事件 在XML布局文件中,可以直接为控件设置点击事件。首先,在需要设置点击事件的控件上添加android:onClick属性,并指定一个方法名作为点击事…

    other 2023年9月6日
    00
  • Vscode如何设置三行布局?Vscode设置三行布局的方法

    Vscode如何设置三行布局? 在Vscode中,你可以通过以下步骤设置三行布局: 打开Vscode并进入扩展商店。 搜索并安装“Custom CSS and JS Loader”扩展。 安装完成后,点击Vscode左侧的扩展图标,找到“Custom CSS and JS Loader”扩展并点击“设置”按钮。 在设置页面中,找到“Custom CSS”选项…

    other 2023年9月5日
    00
  • c# 自定义值类型一定不要忘了重写Equals,否则性能和空间双双堪忧

    作为网站的作者,我很高兴为您讲解C#自定义值类型如何重写Equals方法才能达到更高的性能和更好的空间管理。 为什么要重写Equals方法 在C#中,值类型变量默认情况下是根据其值进行比较,而引用类型变量则是根据它们所引用的对象(即内存地址)进行比较。 当我们自定义值类型时,如果不重写Equals方法,它会使用默认的Object.Equals方法进行比较,这…

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