命名的捕获组可以像捕获组一样使用-它们在结果数组中也有匹配索引,可以通过\1
,\2
唯一的区别是他们可以另外由他们的名字引用。可以通过以下方式访问捕获组的匹配信息:
在同一模式中,所有名称都必须是唯一的。具有相同名称的多个命名捕获组会导致语法错误。
/(?<名字>)(?<姓名>)/;//语法错误:正则表达式无效:捕获组名称重复
如果重复的命名捕获组不在同一组中,则会放宽此限制分离选择因此,对于任何字符串输入,实际上只能匹配一个命名的捕获组。这是一个更新得多的功能,所以请检查浏览器兼容性在使用之前。
/(?<年份>\d{4})-\d{2}|\d{2}-(?<年份>\d{4})/;//工程;“年”可以在连字符之前或之后
命名的捕获组都将出现在结果中。如果命名的捕获组不匹配(例如,它属于分离),上的相应属性组
对象具有值未定义
.
/(?<ab>ab)|(?<cd>cd)/.exec(“cd”).组;//[对象:空原型]{ab:未定义,cd:“cd”}
您可以使用d日
标志。除了在指数
返回的数组上的属性exec()
,您也可以在上通过他们的姓名访问他们索引.组
.
与未命名的捕获组相比,已命名的捕获组具有以下优势:
- 它们允许您为每个子匹配结果提供描述性名称。
- 它们允许您访问子匹配结果,而无需记住它们在模式中的显示顺序。
- 重构代码时,可以更改捕获组的顺序,而不用担心破坏其他引用。