分组

对模式进行分组,实现分组捕获与非捕获匹配

分组字符集

字符

含义

(x)

  • 匹配 x并且捕获匹配项,称为捕获括号

  • 被匹配的子字符串可以在结果数组的元素 [1]...[n] 中找到

  • 或在被定义的 RegExp 对象的属性 $1...$9 中访问到

(?<key>expression)

  • 可以通过组名方便的访问到指定的组,而不需要去一个个的数编号

  • key:为组名

  • expression:为分组表达式

(?:x)

  • 匹配 x不会捕获匹配项,称为非捕获括号

  • 匹配项不能够从结果数组的元素 [1]...[n]

  • 或已被定义的 RegExp 对象的属性 $1...$9 再次访问到

分组模式

普通捕获组

捕获组的括号从左到右编号,正则引擎会记录每个分组匹配内容,并允许在模式或替换字符串中引用它

/([\d]{4})-([\d]{2})-([\d]{2})/.exec("2019-07-02"); // 捕获年月日
/**
匹配结果数组:["2019-07-02", "2019", "07", "02", index: 0, input: "2019-07-02", groups: undefined]
数据[0]:完整匹配字符串
数组[1]:捕获“年”
数组[2]:捕获“月”
数组[3]:捕获“日”
**/

如下图所示,捕获组的编号是按照“(”出现的顺序,从左到右,从1开始进行编号

嵌套捕获组

捕获分组括号允许嵌套,在这种情况下,捕获数据组编号也从左到右编号

如下图所示,嵌套捕获组的编号也是按照“(”出现的顺序,从左到右,从1开始进行编号

命名捕获组

通过给捕获组中的括号命名,可以方便访问到指定的组,而不需要去一个个的数编号

命名捕获组语法结构和普通分组类型,仅在分组前多了?<key>结构,其中key值为当前分组的名称

非捕获组

指括号分组中的内容无需捕获,不出现在匹配结果数组元素中;当我们需要括号来正确应用量词,但不希望使用分组结果中的内容,则可使用非捕获组

使用非捕获组的表达式,匹配的文本将不会进入到匹配结果数组中,分组也就不会被编排

Last updated

Was this helpful?