ES2018 和 ES2019 中的正则表达式

AI 编程助手,豆包旗下的编程助手,提供智能补全、智能预测、智能问答等能力,节省开发时间,释放脑海中的创造力,支持 VSCode,点击体验 AI

正则表达式作为字符串处理的重要工具,一直是前端编程中不可替代的一部分。

在 ES6 之前,JavaScript 采用的正则表达式引擎大致有两种:BRE(Basic Regular Expressions)和ERE(Extended Regular Expressions),它们都有自己的语法和特性。

随着 JavaScript 的发展,正则表达式终于得到了改进。ES6 中,引入了一些新的功能,如后行断言、Unicode 属性转义等。而在 ES2018 和 ES2019 中,正则表达式又得到了进一步的增强。

ES2018 中的正则表达式

dotAll 模式

在默认模式下,. 通配符表示除了换行符外的任意字符。但是在某些场合下,我们需要 . 匹配所有字符,包括换行符。

ES2018 引入了 dotAll 模式,可以让 . 匹配所有字符。需要使用 s 标记表示。

----- -- - ---------------
------------------------------------- -- ----

向前查找

正则表达式中,通过(?=pattern)或(?!pattern)的形式表示向前查找或向前否定查找。

在 ES2018 中,向前查找得到了改进,可以在查找之前加入一个确定的字符串。需要使用 ?<= 或 ?<! 表示。

----- -- - --------------
------------------------------- -- - ------- ------ -- ------ --------- ------- --------- -

Rest 参数捕获

在正则表达式中,我们可以使用捕获组(Capture Groups)来捕获匹配到的内容。而在 ES2018 中,引入了 Rest 参数捕获功能,可以将所有捕获组的内容捕获到一个数组中。

----- -- - --------------------------
------------------------------------ -- - ------------- ------- ----- ----- ------ -- ------ ------------- ------- --------- -

可以看到,不仅匹配到了整个字符串,还分别捕获了年、月、日的内容。而如果我们使用 Rest 参数捕获功能,可以将这些内容放到一个数组中。

----- -- - --------------------------
----- ------- -------- - -----------------------
------------------ -- - ------- ----- ---- -

ES2019 中的正则表达式

Unicode 转义

在 ES6 中,正则表达式已经加入了 Unicode 属性转义功能。在 ES2019 中,加入了更方便的 Unicode 转义功能。

我们可以使用 \u{n} 或 \u{nnnnn} 的形式表示 Unicode 的字符,其中 n 为 0-9 的数字,nnnnn 为 Unicode 编码,最多可以表示 6 个十六进制数字。

----- -- - -------------
--------------------------- -- ----

RegExp.prototype.{Symbol.matchAll}

在 ES6 中,String.prototype.matchAll 方法已经被引入,可以返回一个迭代器,用于遍历所有匹配的内容。

在 ES2019 中,RegExp 对象也加入了一个新的属性,即 RegExp.prototype.{Symbol.matchAll},具有相同的功能。

----- -- - -------
----- --- - ---- --- -------
----- ----------- - -------------------------
--- ---- ----- -- ------------ -
  -------------------
-
---
 -  - ------ ------ -- ------ ---- --- ------- ------- --------- -
 -  - ------ ------ -- ------ ---- --- ------- ------- --------- -
 --

总结

ES2018 和 ES2019 中的正则表达式带来了更强大、更方便的功能,使得正则表达式的编写变得更加灵活和高效。

掌握这些新特性,可以帮助我们更好地处理字符串数据,提高代码的效率和质量。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/64c8aa2a5ad90b6d041456c5


猜你喜欢

  • Promise.any() 方法介绍及在 ES11 中的应用

    Promise.any() 方法是 ES2021 中新增的 Promise 方法之一,它可以从多个 Promise 中返回第一个 resolved 的 Promise,而不是像 Promise.all...

    1 年前
  • 如何利用 VS Code 和 ESLint 打造一款强大的代码检查工具

    前端开发中,代码质量的保障是至关重要的。利用代码检查工具可以大大地提高代码质量和开发效率,同时也减轻了开发人员的工作压力。本文将介绍如何利用 VS Code 和 ESLint 打造一款强大的代码检查工...

    1 年前
  • 如何在 Azure Functions 中使用 SQL Server?

    Azure Functions 是微软 Azure 云平台提供的一种 Serverless 计算服务,拥有高度的弹性和可扩展性,可以轻松实现各种应用的快速开发和部署。

    1 年前
  • RxJS 实现 debounceTime 和 throttleTime 的原理解析

    在前端开发中,我们经常需要处理用户活动,例如点击、输入等事件。但是这些事件在一定程度上会影响应用性能与流畅度,从而导致用户体验变差。一种解决办法就是对这些事件进行节流与防抖处理,这时候 RxJS 的 ...

    1 年前
  • Chai expect 语法详解及常见用法示例

    前言 在前端开发中,测试是非常重要的一环。当我们修复一个 bug 或者添加一个新功能时,我们需要确保其他部分的代码不会受到影响。因此,测试代码是非常必要的。 在 JavaScript 测试领域,Cha...

    1 年前
  • Redis 并发下 CPU 性能瓶颈解决方法

    引言 Redis 是一种基于内存的高性能键值存储系统,被广泛应用于缓存、消息队列等场景。在高并发环境下,Redis 可能会成为系统性能的瓶颈之一,特别是在 CPU 密集型任务上,可能出现 CPU 使用...

    1 年前
  • Web Components 可行吗?以及它如何改变现有的前端开发?

    Web Components 是一项由 W3C 制定的新技术标准,旨在提供一种可以轻松创建可复用自定义 HTML 元素的方式。这些自定义元素可以封装 HTML、CSS 和 JavaScript,可以与...

    1 年前
  • Promise 中的缓存和重试技巧

    在前端开发过程中,我们经常需要处理异步操作。为了避免回调地狱,ES6 引入了 Promise,让异步操作变得更加可读可维护。然而,使用 Promise 时我们还需要考虑缓存和重试的问题。

    1 年前
  • Mongoose 中 Schema 的使用详解

    作为一个前端开发人员,很多时候我们需要与数据库打交道。而 Mongoose 是一个非常流行的 Node.js MongoDB 驱动,它的使用非常方便。在这篇文章中,我们主要讲解 Mongoose 中 ...

    1 年前
  • 解决 Angular 应用程序中的依赖注入问题

    Angular 是一个开源的前端框架,它提供了很多功能来帮助开发人员构建可伸缩的现代 Web 应用程序。其中一个功能是依赖注入(Dependency Injection,DI)。

    1 年前
  • 如何在 Express.js 中启用 https

    前言 在现今互联网时代,HTTPS 已日益成为一种标准的加密传输协议。原本只有受信任的银行、金融机构等机构才使用的 HTTPS,如今几乎成为了所有网站必备的安全模式。

    1 年前
  • 如何在 Docker 容器中运行 Apache Tomcat?

    Apache Tomcat 是一款常用的 Java Web 应用服务器。在前端开发中,有时需要将前后端分离,使用 Tomcat 来部署前端应用。而 Docker 是一种快速部署应用的方式,能够让我们更...

    1 年前
  • GraphQL 入门教程之基本数据类型的使用

    介绍 GraphQL 是一种由 Facebook 开发的用于 API 接口的查询语言和运行时环境,能够减少数据传输并提高 API 执行性能。在 GraphQL 中,所有的查询和变更都由客户端制定,在服...

    1 年前
  • 如何使用 Jest 测试 Redux 应用程序?

    在前端开发中,我们经常会使用 Redux 来管理应用程序的状态。而在开发过程中,为了保证代码质量和稳定性,测试是非常必要的。Jest 是一个流行的 JavaScript 测试框架,可以帮助我们快速编写...

    1 年前
  • Socket.io 如何处理链接数过多的错误

    Socket.io 是一个能够实现实时双向通信的 JavaScript 库。它广泛应用于网页、移动应用程序和游戏的开发,极大地简化了后端与前端之间的数据传输。然而,当同时连接的客户端数量过多时,Soc...

    1 年前
  • React Native 适配 iPhone X 的坑与解决

    随着 iPhone X 的发布,移动端开发者需要考虑新设备的适配问题,尤其是针对 React Native 的开发,需要注意 iPhone X 的屏幕适配问题。 本文将详细介绍 React Nativ...

    1 年前
  • Mocha 测试框架中常见的错误解决方法

    Mocha 是一个流行的 JavaScript 测试框架,支持浏览器和 Node.js 环境。它易于使用,可以进行测试的异步代码和前端单元测试,同时支持 BDD 和 TDD 风格的测试。

    1 年前
  • 从 normalize.css 到 reset.css:CSS Reset 的演变与哲学

    在前端开发中,CSS Reset 是一种重要的技术实践。它的目的是通过重置、规范化浏览器样式来解决跨浏览器之间的差异,保证网页样式的一致性。近年来,Normalize.css 和 Reset.css ...

    1 年前
  • 原生 ES7 的 Object.getOwnPropertyDescriptors 方法让你更灵活地操作对象属性

    在日常的前端开发过程中,我们经常需要对对象进行属性操作。而在 ES6 引入的 Object.defineProperty 方法中,我们可以设置一个对象属性的 descriptor 对象,来控制这个属性...

    1 年前
  • Babel 编译 ES6 代码的配置

    随着 JavaScript 的发展,ES6 已经成为了现代 JavaScript 开发的标准。然而,ES6 的语法对于很多老版本的浏览器来说仍不兼容。为了解决这个问题,我们可以使用 Babel 来将 ...

    1 年前

相关推荐

    暂无文章