ES12 中 RegExp 的新特性:正则表达式的断言

在 ES12 中,正则表达式又有了新特性:断言(assertion)。断言可以让我们更加精确地匹配字符串,在某些情况下能够大大简化正则表达式的编写。

什么是断言

断言是一种特殊的正则表达式语法,它可以匹配一个位置,而不是匹配一个字符。换句话说,它可以让我们确认某个位置前面或后面的内容是否满足一定的条件。

正向肯定断言

正向肯定断言是最基本的断言之一,它使用 (?=...) 的语法来匹配一个前面满足特定条件的位置。比如,我们可以使用正向肯定断言来匹配一个字符串中后面紧跟着数字的位置:

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

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

在上面的例子中,我们使用 (?=\d) 来匹配后面紧跟着数字的位置, search() 方法返回了 5,表示正则表达式匹配到了这个位置。

正向否定断言

正向否定断言是正向肯定断言的反面,它使用 (?!...) 的语法来匹配一个前面不满足特定条件的位置。比如,我们可以使用正向否定断言来匹配一个字符串中后面不是数字的位置:

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

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

在上面的例子中,我们使用 (?!\d) 来匹配后面不是数字的位置, search() 方法返回了 0,表示正则表达式匹配到了这个位置。

反向肯定断言

和正向肯定断言类似,反向肯定断言使用 (?<=...) 的语法来匹配一个后面满足特定条件的位置。比如,我们可以使用反向肯定断言来匹配一个字符串中前面紧贴着数字的位置:

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

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

在上面的例子中,我们使用 (?<=\d) 来匹配前面紧贴着数字的位置, search() 方法返回了 5,表示正则表达式匹配到了这个位置。

反向否定断言

反向否定断言使用 (?<!...) 的语法来匹配一个后面不满足特定条件的位置。比如,我们可以使用反向否定断言来匹配一个字符串中前面不是数字的位置:

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

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

在上面的例子中,我们使用 (?<!\d) 来匹配前面不是数字的位置, search() 方法返回了 0,表示正则表达式匹配到了这个位置。

应用场景

断言不仅能够让我们更加精确地匹配字符串,还能够大大简化正则表达式的编写。比如,我们可以使用断言来匹配一个字符串中所有不在括号内的单词:

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

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

在上面的例子中,我们使用 \b\w+\b 来匹配一个单词,然后通过 (?![^(]*\)) 来排除在括号内的单词。

总结

断言是 ES12 中新加入的正则表达式特性,它可以让我们更加精确地匹配字符串,在某些情况下能够大大简化正则表达式的编写。本文介绍了四种常见的断言语法:正向肯定断言、正向否定断言、反向肯定断言和反向否定断言,并举了一些实际应用的例子。

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


猜你喜欢

  • SASS 中如何处理重复的样式代码

    SASS 是一种强大的 CSS 预处理器,使用它可以让前端开发变得更加高效。其中一个重要的功能就是处理重复的样式代码,我们可以使用 SASS 提供的 mixin 和 extend 这两个功能来实现。

    1 年前
  • Redux 中间件开发实战

    Redux 是一个流行的 JavaScript 应用程序状态管理库。它可以轻松地跟踪应用程序的状态并使得状态的修改易于管理。Redux 为应用程序提供了一个单一的状态存储器,使得所有状态都集中在一个地...

    1 年前
  • Sequelize 如何重命名表格?

    在前端开发中,Sequelize 是一种流行的 ORM(Object-Relational Mapping)工具,用于连接关系型数据库并进行数据库操作,如查询、添加、更新和删除数据等。

    1 年前
  • Promise 中 then 和 catch 的执行顺序

    Promise 中 then 和 catch 的执行顺序 在 JavaScript 中,Promise 是异步编程的一种解决方案,它可以优雅地处理异步操作,避免传统回调函数的回调地狱(callback...

    1 年前
  • Tailwind 如何实现响应式布局?

    响应式布局是为了让网页能够自适应不同设备的屏幕尺寸而设计的一种布局方式。在前端开发中,我们经常需要实现响应式布局来适配不同的设备。Tailwind 是一款 CSS 工具库,提供了很多实用的 CSS 类...

    1 年前
  • 如何解决 PM2 在应用启动时卡顿的问题

    问题描述 在使用 Node.js 开发应用时经常会用到进程管理器,而目前比较流行的进程管理器之一就是 PM2。但是,有些开发者会发现在使用 PM2 启动应用时,会出现一定的卡顿现象,尤其是在应用比较大...

    1 年前
  • PWA 应用中如何优化性能

    Progressive Web App (PWA) 应用是一种跨平台的应用程序,它采用了网页应用程序的优点,同时也具备了原生应用程序的体验。为了让 PWA 应用能够快速响应和加载,需要进行性能优化。

    1 年前
  • 使用 Hapi.js 和 Joi 作为请求参数验证

    在 Web 开发中,请求参数的验证和过滤是非常重要的,可以有效地保证系统的安全和稳定。在前端类技术中,Hapi.js 和 Joi 是两个非常常用的工具,可以方便地进行请求参数验证。

    1 年前
  • 如何使用 Next.js 实现图片懒加载

    前端开发需要保证页面性能,其中图片的加载是一个重要的性能问题。传统的加载图片的方法是在页面加载时一次性加载所有图片,但这种方法会影响用户的体验,特别是在移动设备上,因为移动设备的带宽较小,加载速度会更...

    1 年前
  • 如何在 Mongoose 中创建复合索引

    如何在 Mongoose 中创建复合索引 在数据库中创建索引是提高查询速度和性能的一种常见方式,尤其是在处理大量数据时。在 Mongoose 中,我们可以使用 Schema Indexes 来创建索引...

    1 年前
  • 用 Material Design Lite 构建交互式表单

    前言 在现代网站和应用程序中,表单是非常重要的。它们是用户和网站之间的主要交互方式。因此,构建一个易于使用且美观的交互式表单至关重要。在这篇文章中,我们将介绍利用 Material Design Li...

    1 年前
  • 使用 Mocha 进行测试时遇到 Mock 数据不生效的问题解决办法

    在前端开发中,测试是非常重要的一部分,而在测试时,经常需要用到 Mock 数据来模拟真实数据。然而,有时我们会发现,用 Mocha 进行测试时,Mock 数据不生效的问题。

    1 年前
  • 如何在 LESS 中使用字体图标

    在前端开发中,我们经常需要在网页中使用字体图标来美化页面样式。字体图标使用方便、易于扩展和定制化,因此广受前端开发者的喜爱。 LESS 是一种动态样式语言,它拓展了 CSS 语言并使其更加灵活和强大。

    1 年前
  • Koa 实现 WebSocket 通信

    WebSocket 是一种在 Web 应用程序中进行双向通信的通信协议,使用它可以非常方便地实现实时的数据推送、聊天室等功能。而 Koa 则是一个在 Node.js 平台上构建 Web 应用程序的框架...

    1 年前
  • 解决 Fastify 跨域问题的方法

    在前端开发中,跨域是一个经常会遇到的问题。如果我们使用 Fastify 这个 Node.js 框架来开发后端 API,可能也会遇到跨域问题。本文将介绍如何在 Fastify 中解决跨域问题,包括跨域的...

    1 年前
  • 新一代的 ESLint 已经发布

    近日,新一代的 ESLint 已经发布,它有着更好的代码质量分析能力,支持多种语言规范,提供更多的自定义配置能力等特点。这篇文章将为大家详细介绍这个工具,并提供学习和指导说明,希望能帮助前端开发人员更...

    1 年前
  • 了解 RESTful API 的最佳实践

    简介 随着 Web 技术的发展,Web 应用程序的规模越来越庞大,Web API 已经成为 Web 应用程序的核心组成部分。使用 RESTful API 构建 Web 应用程序已成为业界共识,因为它具...

    1 年前
  • 使用 ES11 中的 Optional chaining 优雅地处理 undefined 和 null

    在 JavaScript 中,我们经常需要处理变量是否为 null 或 undefined 的情况。这个问题在访问对象的属性时尤其常见。在以前,我们需要写一些冗长的代码来处理这个问题,如下: -- -...

    1 年前
  • ES10 之 setInterval() 新增性能优化机制

    在前端开发中,定时器是一个常用的工具。其中 setInterval() 函数用于按指定时间间隔重复执行指定代码。然而,在旧版的 JavaScript 中,setInterval() 函数的执行存在一些...

    1 年前
  • Redis 性能优化技巧大汇总

    Redis 是一个高效的 NoSQL 数据库,常用于缓存、消息队列、计数器等场景。对于前端来说,Redis 也是一个不可或缺的工具。本文将介绍几个 Redis 性能优化技巧,供前端开发者参考和借鉴。

    1 年前

相关推荐

    暂无文章