两者之间有什么区别?:,?!然后呢?在正则表达式中的应用

在前端开发中,我们经常会使用到正则表达式来进行字符串的匹配和替换。正则表达式中有一些常见的特殊字符,包括冒号(:)、逗号(,)、问号(?)、感叹号(!)等。这些特殊字符在正则表达式中有着不同的含义和用法。

冒号(:)

在正则表达式中,冒号通常用于表示命名捕获组。命名捕获组是指通过给一个捕获组设置名称的方式来引用捕获到的文本。例如,以下正则表达式可以匹配形如“2023-04-07”的日期格式:

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

其中,(?<year>\d{4})(?<month>\d{2})(?<day>\d{2}) 分别表示年、月、日的捕获组,并且设置了相应的名称。通过 match() 方法获取到匹配结果后,我们可以根据捕获组的名称来获取对应的值:

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

逗号(,)

在正则表达式中,逗号通常用于表示量词。量词用于指定匹配的次数,例如 {n} 表示匹配 n 次,{m,n} 表示匹配 m 到 n 次。逗号还可以用于分隔多个模式,例如 (pattern1, pattern2) 表示匹配 pattern1 或 pattern2。

以下是一些使用逗号的例子:

  • 匹配至少一个数字:\d+
  • 匹配三个小写字母: [a-z]{3}
  • 匹配 3 到 5 个大写字母:[A-Z]{3,5}
  • 匹配单词 "hello" 或 "world":(hello, world)

问号(?)

在正则表达式中,问号有两种不同的含义。

非贪婪模式

当问号出现在量词后面时,它可以将量词变为非贪婪模式。默认情况下,量词会尽可能地匹配更多的字符;而非贪婪模式则会尽可能地匹配更少的字符。例如,以下正则表达式可以匹配最短的含有 a 的字符串:

------

零宽断言

问号还可以用于表示零宽断言。零宽断言是指在匹配字符串时,不会消耗任何字符,并且只是判断字符串中是否符合某种条件。常见的零宽断言包括 lookahead 和 lookbehind。

  • lookahead: (?=pattern) 表示后面紧跟着的字符串必须匹配 pattern。
  • negative lookahead: (?!pattern) 表示后面紧跟着的字符串不能匹配 pattern。
  • lookbehind: (?<=pattern) 表示前面紧挨着的字符串必须匹配 pattern。
  • negative lookbehind: (?<!pattern) 表示前面紧挨着的字符串不能匹配 pattern。

以下是一些使用零宽断言的例子:

  • 匹配后面紧

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


猜你喜欢

  • 如何在 jQuery 中传递参数到事件处理程序?

    在前端开发中,我们常常需要处理各种用户交互事件。其中,jQuery 是一个广泛使用的 JavaScript 库,它提供了许多方便的方法来操作 DOM 元素并处理事件。

    7 年前
  • 每个JavaScript函数都必须返回一个值吗?

    在 JavaScript 中,每个函数不一定都需要返回一个值。但是,如果您希望函数执行某些操作并返回结果,则必须显式地使用 return 语句返回一个值。 函数返回值的重要性 函数的返回值对于代码的正...

    7 年前
  • 范围和$rootscope之间的差异

    在AngularJS中,范围(Scope)是一个对象,用于传递模型数据和行为函数。而$rootScope是整个应用程序中所有控制器的公共父元素。 范围(Scope) 范围是AngularJS中最重要的...

    7 年前
  • 使用联接方法将数组转换为字符串而不带逗号

    在前端开发中,经常需要将一个数组转换为一个字符串。但是默认情况下,使用 toString() 方法或者直接将数组转换为字符串会在每个元素之间添加逗号,这可能不符合我们的需求。

    7 年前
  • 如何打开弹出窗口并刷新父页面

    打开弹出窗口并刷新父页面是前端开发中常见的需求。本文将介绍如何以简单而有效的方式实现这一功能。 背景知识 在 JavaScript 中,操作浏览器窗口和页面的 API 是 window 对象。

    7 年前
  • jQuery的Ajax请求在没有发送的情况下被取消

    问题背景 在前端开发中,经常会使用Ajax技术来实现异步数据交互。其中,jQuery是非常流行的JavaScript库之一,它提供了一个方便易用的Ajax方法。但是,有时候会遇到这样的问题:在调用jQ...

    7 年前
  • DOM中的JavaScript移动元素

    在Web开发中,经常需要在页面中移动和操作元素。JavaScript提供了一些API来轻松地完成这些任务。本文将介绍如何使用DOM API在JavaScript中移动元素,并包含代码示例。

    7 年前
  • JavaScript错误的可能情况:“预期标识符、字符串或数字”

    在前端开发中,JavaScript是一种常用的编程语言。然而,即使是经验丰富的开发人员,有时也会遇到“预期标识符、字符串或数字”等JavaScript错误。这篇文章将深入探讨这个错误的可能情况,并为您...

    7 年前
  • 用JavaScript验证电话号码

    随着互联网的普及,电话号码成为了人们在进行数码交流时常常需要填写的信息。而在前端开发中,通过JavaScript编写代码对电话号码进行验证也变得越来越重要。 验证规则 电话号码的格式因国家和地区的不同...

    7 年前
  • jQuery:如何检查元素是否具有某些CSS类/样式

    在前端开发中,经常需要检查元素是否具有某些CSS类或样式。jQuery是一个流行的JavaScript库,它提供了方便的方法来操作页面上的元素。本文将介绍如何使用jQuery来检查元素是否具有某些CS...

    7 年前
  • 部署一个生产Node.js服务器[关闭]

    很抱歉,我是一个AI语言模型,无法创建和编辑关闭状态的文章。但是,我可以为您提供有关如何部署生产Node.js服务器的详细指南。 部署生产Node.js服务器 Node.js是一种非常流行的服务器端J...

    7 年前
  • "拒绝访问" 的 JavaScript 错误

    在前端开发中,当尝试以编程方式创建一个 iframe 时,我们可能会遇到一个常见的错误:拒绝访问。该错误表示浏览器不允许当前脚本访问所请求的资源。 错误原因 通常,此错误是由于浏览器的同源策略引起的。

    7 年前
  • 将序数后缀添加到数字的前端实现

    在前端开发中,有时需要将数字转换为序数形式(如1st、2nd、3rd、4th等),以便更好地显示日期、排名和其他信息。本文将介绍如何使用JavaScript实现这一功能。

    7 年前
  • 为什么0会导致语法错误?

    在前端开发中,我们有时会遇到一些奇怪的语法错误,其中一个比较常见的就是由于数字0导致的错误。这个问题可能看起来很简单,但实际上涉及到了 JavaScript 中的数据类型、等值比较和弱类型等概念。

    7 年前
  • JavaScript中唯一的对象标识符

    在JavaScript中,每个对象都有一个唯一的标识符。这个标识符是由JavaScript引擎内部自动生成的,并可以用来比较两个对象是否相等。 对象标识符是什么? 对象标识符是JavaScript中用...

    7 年前
  • JavaScript document.getElementsByClassName兼容IE

    在前端开发中,我们经常会使用 document.getElementsByClassName 方法来获取指定类名的元素节点。然而,这个方法在 IE8 及以下版本的浏览器中并不支持,因此需要我们进行兼容...

    7 年前
  • 解析日期没有时区的JavaScript

    在前端开发中,经常会涉及到日期的处理。但是,在JavaScript中处理日期时,可能会遇到一些困惑。其中之一就是解析日期没有时区的情况。 问题描述 在JavaScript中,使用new Date()可...

    7 年前
  • 你可能需要一个合适的程序来处理这种类型的文件

    在前端开发中,我们经常会遇到需要将一些资源文件打包并编译成浏览器可识别的代码的情况。而针对不同的资源文件类型和特殊需求,我们需要使用不同的程序来进行处理。 在这篇文章中,我将重点介绍两个前端开发中常用...

    7 年前
  • 在 if 语句中赋值变量,好还是不好?

    在编写前端代码时,我们经常需要使用条件语句来根据不同的条件执行不同的操作。在某些情况下,我们可能会同时在条件语句中进行变量赋值。那么,在 if 语句中赋值变量到底是好还是不好呢?本文将对这个问题进行深...

    7 年前
  • 打字稿的私有成员

    介绍 在前端开发中,打字稿(TypeScript)是一种流行的静态类型语言,它可以帮助开发者在开发过程中避免很多常见的编程错误。在 TypeScript 中,除了公共成员外,还支持私有成员,这些成员只...

    7 年前

相关推荐

    暂无文章