正则基础之 捕获组(capture group)

yizhihongxing

正则基础之 捕获组(capture group)

介绍

在正则表达式中,捕获组是一个由括号包围的子表达式。在使用正则表达式匹配字符串时,可以通过捕获组从匹配到的字符串中提取想要的部分。

捕获组可以使用圆括号中的数字引用到,如果有多个捕获组,可以通过捕获组的序号来区分哪一个捕获组是被引用的。除了序号之外,也可以给捕获组设置名字,用于更清晰、方便的引用。

示例

下面是两个具体的示例,在这些示例中都展示了如何在正则表达式中使用捕获组。为了更清晰方便,我们使用JavaScript语言对这些示例进行了实现。

示例一

假设我们有一个字符串,想要从字符串中提取出其中的手机号码。这时候可以使用正则表达式和捕获组来快速实现:

const str = 'Hi,我的手机号是15555555555, bye!'
const reg = /1[35789]\d{9}/ // 匹配手机号码的正则表达式
const match = str.match(reg) // 匹配字符串
if (match) {
  const phone = match[0] // 取出第一个捕获组的内容
  console.log('匹配到的手机号码是:', phone)
} else {
  console.log('未匹配到手机号码')
}

在这个示例中,我们使用了一个正则表达式来匹配手机号码,保存在一个变量 reg 中。然后我们使用字符串的 match 方法来对字符串进行匹配,得到一个匹配结果 match

match 结果中,每个匹配到的字符串都是一个数组元素。由于我们只匹配了一个电话号码,所以 match 只包含一个元素。我们通过索引 0 来取出这个元素,并保存在 phone 变量中。

示例二

假设有一个字符串,其中包含了多个邮箱地址。我们想要从这些邮箱地址中提取出邮箱的用户名和域名。这里的用户名和域名之间通过 @ 符号分开。这时可以使用正则表达式的捕获组来实现:

const str = '我的电子邮箱是test1@test.com,还有一个邮箱是test2@test.com'
const reg = /([\w-.]+)@([\w\-]+\.\w+)/g // 匹配所有邮箱地址的正则表达式
const matches = [...str.matchAll(reg)] // 匹配字符串中的所有邮箱地址
for (const match of matches) {
  const username = match[1] // 取出用户名
  const domain = match[2] // 取出域名
  console.log(`匹配到的邮箱用户名是:${username},域名是:${domain}`)
}

在这个示例中,我们使用了一个正则表达式来匹配所有的邮箱地址,并将其保存在一个变量 reg 中。我们使用字符串的 matchAll 方法来对字符串进行匹配,得到一个迭代器对象。

在每个匹配结果中,第一个捕获组保存了邮箱的用户名,第二个捕获组保存了邮箱的域名。我们通过取出这两个捕获组的内容,分别保存在 usernamedomain 变量中,并将其打印出来。

结论

通过上述示例和讲解,我们了解了正则表达式中的捕获组的使用方法。它可以帮助我们从匹配到的字符串中提取想要的内容,并提供了方便的方式来访问这些内容。在实际使用中,还可以和一些高级用法结合使用,如非捕获组、正则表达式替换等等。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:正则基础之 捕获组(capture group) - Python技术站

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

相关文章

  • JS实现获取当前所在周的周六、周日示例分析

    要实现获取当前所在周的周六、周日,可以采用以下步骤: 步骤一:获取当前日期 首先,我们需要获取当前的日期对象,可以使用 JavaScript 中的 Date() 函数,如下所示: let today = new Date(); 步骤二:获取本周的第一天 接下来,我们需要获取本周的第一天,也就是周一的日期。我们可以通过以下代码实现: let firstDay …

    JavaScript 2023年6月10日
    00
  • js简单判断移动端系统的方法

    判断移动端系统是JS中非常常见的一个需求,下面给出几种判断方式: 方法一:根据navigator.userAgent字符串进行判断 移动端设备的 UA(UserAgent)字符串中,都会包含操作系统的信息,因此我们可以通过解析 UA 字符串来判断设备使用的操作系统。其中一些常见的 UA(UserAgent)字符串包括: Android:/Android/i …

    JavaScript 2023年6月10日
    00
  • JavaScript中字符串(string)转json的2种方法

    下面我将详细讲解一下“JavaScript中字符串(string)转json的2种方法”。 背景知识 在JavaScript中,JSON是一种轻量级的数据交换格式,通常用于浏览器和服务器之间的数据传输。在实际开发中,我们需要将一些数据转换成JSON格式来进行传输,而字符串则是最常见的一种数据类型。那么如何将字符串转换成JSON格式呢? 方法一:使用JSON.…

    JavaScript 2023年5月27日
    00
  • token 机制和实现方式

    Token机制是一种通过在用户请求中加入令牌(token)来验证用户身份的方式。相比于传统的基于cookie或session的身份验证方式,Token机制能够避免跨站请求伪造(CSRF)和跨站脚本攻击(XSS)等安全问题。 以下是Token机制的实现方式: 用户登录时,需要向服务器发送登录请求(例如通过POST方式提交用户名和密码)。服务器根据用户输入的用户…

    JavaScript 2023年6月11日
    00
  • js实现数组的扁平化

    实现数组扁平化的方法有多种,以下介绍两种比较实用的方式。 方法一:使用递归实现数组扁平化 递归算法是一种自我调用的方法,即函数内部调用自身。使用递归实现数组扁平化的方式较为简单。 function flatten(arr) { var result = []; for (var i = 0, len = arr.length; i < len; i++…

    JavaScript 2023年5月27日
    00
  • Javascript中使用exec进行正则表达式全局匹配时的注意事项

    在JavaScript中,exec()方法是用于在字符串中执行一个正则表达式搜索的方法,它返回一个包含查找结果的数组。而对于全局匹配,exec() 方法可以在同一个字符串中多次运行来查找所有匹配,但是这也涉及到一些注意事项。 注意事项 必须使用while循环或递归来遍历所有匹配 在使用exec()方法时,需要使用while循环或递归来遍历所有匹配。每次调用e…

    JavaScript 2023年6月10日
    00
  • ES6 Iterator接口和for…of循环用法分析

    ES6 Iterator接口和for…of循环用法分析 ES6引入了Iterator接口,为JavaScript提供了统一的数据遍历访问方式,而for…of循环则是对Iterator接口的应用,我们可以用for…of语法循环遍历具有Iterator接口的数据结构。 Iterator接口概述 Iterator接口是一个具有next方法并且返回一个包…

    JavaScript 2023年6月10日
    00
  • Vue.js仿微信聊天窗口展示组件功能

    Vue.js仿微信聊天窗口展示组件功能的完整攻略如下: 一、背景说明 在网页端实现类似微信聊天窗口展示的组件功能是很常见的需求,在Vue.js中可以通过简单的组件开发实现。以下是具体的实现过程。 二、技术栈要求 在实现过程中,需要用到以下技术栈: Vue.js:前端MVVM框架 webpack:模块打包工具 Sass:CSS预处理器 三、基础页面结构 首先需…

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