无需登录 数据私有 本地保存

正则命名捕获组测试器 - (?<name>...) 语法演示

4
0
0
0
正则表达式模式
测试文本
匹配预览
等待输入正则表达式和测试文本...
常见问题与知识点
什么是命名捕获组?
命名捕获组(Named Capture Group)使用语法 (?<name>...) 为捕获组指定一个名称,从而可以通过名称(而非数字索引)来访问匹配的内容。例如 (?<year>\d{4}) 定义了一个名为 "year" 的捕获组,匹配4位数字。在结果中通过 match.groups.year 访问,代码可读性大幅提升。
如何在 JavaScript 中使用命名捕获组?
使用 exec()matchAll() 获取匹配结果后,通过 result.groups 对象访问。例如:const match = /(?<name>\w+)/.exec('hello'); console.log(match.groups.name); // 'hello'。注意 match() 方法在有 g 标志时不返回 groups,建议使用 matchAll()
命名捕获组与编号捕获组有什么区别?
编号捕获组使用 (...) 并通过数字索引 $1, $2match[1] 访问;命名捕获组使用 (?<name>...) 并通过 match.groups.name 访问。命名组同时也有编号(按左括号顺序),两者可以共存。命名组让正则更易维护,尤其在复杂表达式中优势明显。
如何在替换中使用命名捕获组?
String.prototype.replace() 中,使用 $<name> 语法引用命名捕获组。例如:'2024-01-15'.replace(/(?<y>\d{4})-(?<m>\d{2})-(?<d>\d{2})/, '$<y>年$<m>月$<d>日') 结果为 '2024年01月15日'。也支持 $1, $2 等编号引用。
反向引用 \k<name> 是什么?
反向引用 \k<name> 用于在正则表达式内部引用之前命名捕获组匹配到的内容(而非重新应用模式)。例如 (?<word>\w+)\s+\k<word> 可匹配重复的单词如 "hello hello"。它在模式中要求后面出现与前面捕获组完全相同的文本,常用于查找重复内容。
浏览器兼容性如何?
命名捕获组是 ES2018(ES9)标准的一部分。所有现代浏览器(Chrome 64+、Firefox 78+、Safari 11.1+、Edge 79+)以及 Node.js 10+ 都完全支持。对于需要兼容旧环境的项目,建议使用 Babel 或 TypeScript 进行转译,或继续使用编号捕获组。
命名捕获组的典型应用场景有哪些?
常见场景包括:解析日期时间(年月日时分秒)、解析URL(协议、主机、路径、查询参数)、解析邮箱(本地部分、域名)、解析日志(时间戳、级别、消息)、处理CSV或配置文件、提取JSON字段(在无法使用JSON.parse时)、以及任何需要从结构化文本中提取多个有意义字段的场景。