分组
对模式进行分组,实现分组捕获与非捕获匹配
分组字符集
字符
含义
(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?