news 2026/4/3 4:11:06

正则表达式 - 分组和引用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
正则表达式 - 分组和引用

正则表达式中的分组和引用

分组(Grouping)和引用(Backreference)是正则表达式中最强大的功能之一。它们允许你捕获子字符串重复复杂模式引用先前匹配的内容,广泛用于提取数据、验证格式、替换文本等。

1. 捕获组(Capturing Groups)

使用圆括号()创建捕获组。每个捕获组会自动编号(从左到右,从1开始),并保存匹配的子字符串。

语法描述示例匹配结果
(pattern)创建一个捕获组/(\d{4})-(\d{2})-(\d{2})/匹配日期 “2025-12-25”整个匹配: “2025-12-25”
组1: “2025”
组2: “12”
组3: “25”
  • 组0:始终代表整个匹配的内容。
  • 组1、组2…:对应每个()的内容。
  • 在替换操作中常用:如将 “2025-12-25” 替换为 “12/25/2025”:$2/$3/$1
2. 非捕获组(Non-capturing Groups)

有时你只需要分组来重复或施加量词,但不想捕获内容。使用(?:pattern)

语法描述示例
(?:pattern)分组但不捕获,不占用编号/https?(://)/→ 只想匹配 “http://” 或 “https://”,但不需要捕获 “😕/”
3. 反向引用(Backreferences)

反向引用允许你在同一个正则表达式中引用先前捕获组的内容

语法描述示例匹配说明
\1,\2, …引用第1、第2个捕获组的内容/^(\w+)=\1$/匹配如 “key=key”,前后完全相同
\k<name>(?<name>...)命名捕获组(部分引擎支持,如 JS、Python、.NET)/^(?<word>\w+)=\k<word>$/同上,更清晰

经典应用示例:

  1. 匹配重复单词

    /\b(\w+)\s+\1\b/i

    匹配 “the the”、“hello hello” 等重复单词(忽略大小写)。

  2. 匹配成对的HTML标签(简化版):

    /<(\w+)>[^<]*</\1>/

    匹配<div>内容</div>,但不匹配<div>内容</p>

  3. 匹配回文结构(有限):

    /^(\d)(\d)\d\2\1$/

    匹配如 “12321”、“45554” 这样的5位回文数字。

4. 命名捕获组(Named Capturing Groups)

更现代、更可读的语法(支持的引擎:JavaScript、Python、Java、.NET、PCRE 等)。

语法描述示例
(?<name>pattern)定义命名组/^(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})$/
\k<name>${name}引用命名组在替换中常用${year}/${month}/${day}

在 JavaScript 中提取:

constregex=/^(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})$/;constmatch="2025-12-25".match(regex);console.log(match.groups.year);// "2025"console.log(match.groups.month);// "12"
5. 分组在量词中的应用

分组允许对复杂模式应用量词:

示例说明
(ab)+匹配 “ab”、“abab”、“ababab” 等
(https?://)?匹配可选的协议部分
(\d{3}-)?\d{8}匹配可选区号的电话号码,如 “010-12345678” 或 “12345678”
6. 实际应用场景总结
场景正则示例用途
提取日期组件/(\d{4})-(\d{2})-(\d{2})/分离年月日
验证密码重复/^(\S{6,20})$/.test(pwd) && pwd === confirmPwd(结合JS)更常用反向引用验证重复内容
替换日期格式str.replace(/(\d{4})-(\d{2})-(\d{2})/, '$2/$3/$1')转为 MM/DD/YYYY
查找重复单词/(\b\w+\b)(\s+\1)+\b/gi高亮文章中重复词
匹配引号内容/["']([^"']*)["']/不完美
更好:/(["'])([^\\]*(\\.[^\\]*)*)\1/
复杂但更准确
注意事项
  • 过多嵌套分组会降低可读性和性能。
  • 不同语言对反向引用的最大组数有限制(如 JS 最多 \1 到 \99)。
  • 某些引擎(如旧版 JS)不支持命名组或后瞻内反向引用。
  • 反向引用是精确匹配先前捕获的内容(包括大小写)。

分组和引用是让正则从“简单查找”变成“智能解析”的关键工具!如果你有具体语言(如 JS、Python)或实际需求(如解析日志、验证表单),我可以给出更针对性的例子。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/24 11:41:16

CMake 安装与配置

CMake 安装与配置详解&#xff08;2025 最新版&#xff09; CMake 是跨平台 C/C 项目构建工具&#xff0c;本节重点讲解在 Windows、macOS、Linux 三大平台上的安装方法以及常用配置&#xff08;环境变量、IDE 集成、缓存配置等&#xff09;。 1. 安装 CMake Windows 推荐方…

作者头像 李华
网站建设 2026/3/30 19:27:41

Hap QuickTime编解码器终极指南:让视频播放飞起来![特殊字符]

Hap QuickTime编解码器终极指南&#xff1a;让视频播放飞起来&#xff01;&#x1f680; 【免费下载链接】hap-qt-codec A QuickTime codec for Hap video 项目地址: https://gitcode.com/gh_mirrors/ha/hap-qt-codec Hap QuickTime编解码器是一款专为现代图形硬件优化的…

作者头像 李华
网站建设 2026/4/1 19:48:19

PaddleX深度学习工具链在NVIDIA 50系列显卡上的突破性兼容方案

PaddleX深度学习工具链在NVIDIA 50系列显卡上的突破性兼容方案 【免费下载链接】PaddleX All-in-One Development Tool based on PaddlePaddle 项目地址: https://gitcode.com/paddlepaddle/PaddleX 随着NVIDIA RTX 50系列显卡的发布&#xff0c;深度学习开发者面临着硬…

作者头像 李华
网站建设 2026/3/31 18:03:27

19、使用Titanium构建跨平台应用中的推送通知功能

使用Titanium构建跨平台应用中的推送通知功能 1. 推送通知概述 推送通知允许应用程序与设备之间发送和接收消息,即使应用程序不在前台运行,设备也能接收消息。iOS和Android操作系统都支持此功能,但实现方式有所不同。iOS应用通过Apple Push Notifications (APN) 服务接收通…

作者头像 李华
网站建设 2026/3/29 8:29:22

PaddlePaddle镜像与Kubernetes集成,实现AI任务编排自动化

PaddlePaddle镜像与Kubernetes集成&#xff0c;实现AI任务编排自动化 在当今企业加速推进AI落地的浪潮中&#xff0c;一个常见的困境反复上演&#xff1a;算法团队在本地训练出高精度模型&#xff0c;却在部署时遭遇“环境不一致”的滑坡——依赖版本冲突、CUDA驱动缺失、Pytho…

作者头像 李华
网站建设 2026/3/13 4:09:14

20、跨平台应用的推送通知与设置管理

跨平台应用的推送通知与设置管理 1. 推送通知功能实现 在应用开发中,推送通知是增强用户互动和留存率的重要手段。以下将详细介绍不同场景下推送通知的实现方法。 1.1 基本推送通知代码 首先是设置默认参数并发送推送通知的代码: // set the default parameters, send t…

作者头像 李华