news 2026/4/28 19:08:33

正则表达式 - 分组和引用

作者头像

张小明

前端开发工程师

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/4/25 3:23:36

6、跨平台应用开发:从理论到实践

跨平台应用开发:从理论到实践 1. 跨平台应用开发基础 在跨平台应用开发中,Model - View - Controller(MVC)模式是核心架构,同时,Widget 框架可用于开发完全自包含的可重用组件。以下是一个使用 Alloy 创建 Widget 的示例代码: <Alloy><Window id="mai…

作者头像 李华
网站建设 2026/4/25 3:23:49

正则表达式 - 断言

正则表达式中的断言&#xff08;Assertions&#xff09; 断言&#xff08;Assertions&#xff09;是正则表达式中一类零宽度的匹配机制&#xff0c;它们只检查当前位置是否满足特定条件&#xff0c;不消耗任何字符&#xff0c;也不参与捕获。断言分为环视&#xff08;Lookarou…

作者头像 李华
网站建设 2026/4/25 3:25:28

CMake 构建流程

CMake 构建流程详解 CMake 的构建过程分为两个主要阶段&#xff1a;配置阶段&#xff08;Configure&#xff09; 和 构建阶段&#xff08;Build&#xff09;&#xff0c;可选还有测试阶段&#xff08;Test&#xff09; 和 安装阶段&#xff08;Install&#xff09;。理解这个流…

作者头像 李华
网站建设 2026/4/28 14:06:58

16、地图与位置功能开发指南

地图与位置功能开发指南 1. 地图与位置功能基础 在开发过程中,有一个新函数会接收 _coords 参数,并将这些值作为自定义字段传递给 Appcelerator 云服务的照片对象。Appcelerator 云服务支持对照片对象进行地理定位查询,这样就能利用存储在照片自定义字段中的信息来查找照…

作者头像 李华
网站建设 2026/4/25 16:17:35

终极SQL查询压力测试指南:SqlQueryStress完整使用教程

终极SQL查询压力测试指南&#xff1a;SqlQueryStress完整使用教程 【免费下载链接】SqlQueryStress SqlQueryStress 是一个用于测试 SQL Server 查询性能和负载的工具&#xff0c;可以生成大量的并发查询来模拟高负载场景。 通过提供连接信息和查询模板&#xff0c;可以执行负载…

作者头像 李华
网站建设 2026/4/23 18:10:50

PaddlePaddle镜像集成飞桨框架最新版,全面支持Transformer结构

PaddlePaddle镜像集成飞桨框架最新版&#xff0c;全面支持Transformer结构 在中文自然语言处理的实际落地过程中&#xff0c;开发者常常面临一个尴尬的局面&#xff1a;模型设计得再精巧&#xff0c;一旦进入部署阶段&#xff0c;就可能因为环境依赖错乱、CUDA版本不匹配或Pyth…

作者头像 李华