命名捕获组:(?<名称>…)

基线 广泛可用

此功能已得到很好的建立,可在许多设备和浏览器版本中使用。从那时起,它就可以跨浏览器使用了 2015年7月.

A类命名捕获组是一种特殊的捕获组允许为组命名。组的匹配结果稍后可以通过此名称而不是其在模式中的索引来标识。

语法

正则表达式
(?<名称>图案)

参数

图案

由正则表达式文字中可能使用的任何内容组成的模式,包括间断.

名称

组的名称。必须是有效的标识符.

描述

命名的捕获组可以像捕获组一样使用-它们在结果数组中也有匹配索引,可以通过\1,\2唯一的区别是他们可以另外由他们的名字引用。可以通过以下方式访问捕获组的匹配信息:

在同一模式中,所有名称都必须是唯一的。具有相同名称的多个命名捕获组会导致语法错误。

js公司
/(?<名字>)(?<姓名>)/;//语法错误:正则表达式无效:捕获组名称重复

如果重复的命名捕获组不在同一组中,则会放宽此限制分离选择因此,对于任何字符串输入,实际上只能匹配一个命名的捕获组。这是一个更新得多的功能,所以请检查浏览器兼容性在使用之前。

js公司
/(?<年份>\d{4})-\d{2}|\d{2}-(?<年份>\d{4})/;//工程;“年”可以在连字符之前或之后

命名的捕获组都将出现在结果中。如果命名的捕获组不匹配(例如,它属于分离),上的相应属性对象具有值未定义.

js公司
/(?<ab>ab)|(?<cd>cd)/.exec(“cd”).组;//[对象:空原型]{ab:未定义,cd:“cd”}

您可以使用d日标志。除了在指数返回的数组上的属性exec(),您也可以在上通过他们的姓名访问他们索引.组.

与未命名的捕获组相比,已命名的捕获组具有以下优势:

  • 它们允许您为每个子匹配结果提供描述性名称。
  • 它们允许您访问子匹配结果,而无需记住它们在模式中的显示顺序。
  • 重构代码时,可以更改捕获组的顺序,而不用担心破坏其他引用。

示例

使用命名捕获组

下面的示例从Git日志条目(使用git日志--格式=%ct,%an--文件名):

js公司
函数parseLog(条目){const{author,timestamp}=/^(?<timestamp>\d+),(?<author>.+)$/.exec(条目,).组;return `${author}在${new Date提交(parseInt(时间戳)*1000,).toLocaleString()}`;}parseLog(“1560979912,Caroline”);//“Caroline于2019年6月19日下午5:31:52承诺”

规格

规范
ECMAScript语言规范
#生产原子

浏览器兼容性

BCD表仅在浏览器中加载

另请参见