正则中\1的用法---反向引用

1、正则表达式中  “\number” 表示反向引用,表示引用一个捕获组,需要和小括号 “()” 一起使用

2、正则捕获组的下标从 0 开始,下标为 0 的组是整个表达式,下标为 1 的表示从左到右开始的第一个左括号所包含的值,后面的数字以此类推

3、捕获组在匹配成功时,会将子表达式匹配到的内容,保存到内存中一个以数字编号的组里,可以简单的认为是对一个局部变量进行了赋值,这时就可以通过反向引用的方式,引用这个局部变量的值。

4、反向引用必须要与捕获组一同使用,如果没有捕获组,而使用了反向引用的语法,不同语言的处理方式不一致,有的语言会抛异常,有的语言会当作普通的转义处理

 

例子:


let r = 'AAABBCCAAAA DDE666FF'

//
*表示零个或多个,所以该匹配值可以有零个或者多个 // +表示至少一个或多个,所以该匹配值至少一个或者多个 // 注意\w包含数字,以下都要注意这一点 // 正常匹配单个字符 let match1 = r.match(/(\w)/g) console.log('match1 :', match1) // match1 : [ 'A','A','A','B','B','C','C','A','A','A','A','D','D','E','6','6','6','F','F' ]

//
匹配模式:单个字符+第一个括号中的匹配值( * —— 有零个或者多个) let match2 = r.match(/(\w)\1*/g) console.log('match2 :', match2) // match2 : [ 'AAA', 'BB', 'CC', 'AAAA', 'DD', 'E', '666', 'FF' ]

//
匹配模式:单个字符+第一个括号中的匹配值( + —— 至少一个或者多个) let match3 = r.match(/(\w)\1+/g) console.log('match3 :', match3) // match3 : [ 'AAA', 'BB', 'CC', 'AAAA', 'DD', '666', 'FF' ]

//
匹配模式:单个字符+单个数字 // 注意\w包含数字,以下都要注意这一点 // [ 'E6', '66' ] let match4 = r.match(/(\w)(\d)/g) console.log('match4 :', match4) // match4 : [ 'E6', '66' ]

//
匹配模式:单个字符+单个数字+第一个括号中的匹配值( * —— 有零个或者多个) // [ 'E6', '66' ] let match5 = r.match(/(\w)(\d)\1*/g) console.log('match5 :', match5) // match5 : [ 'E6', '66' ]

//
匹配模式:单个字符+单个数字+第一个括号中的匹配值( + —— 至少一个或者多个) // [ '666' ] let match6 = r.match(/(\w)(\d)\1+/g) console.log('match6 :', match6) // match6 : [ '666' ]

//
匹配模式:单个字符+单个数字+第一个括号中的匹配值( * —— 有零个或者多个)+第二个括号中的匹配值( * —— 有零个或者多个) // [ 'E666' ] let match7 = r.match(/(\w)(\d)\1*\2*/g) console.log('match7 :', match7) // match7 : [ 'E666' ]

//
匹配模式:单个字符+单个数字+第一个括号中的匹配值( * —— 有零个或者多个)+第二个括号中的匹配值( + —— 至少一个或者多个) // [ 'E666' ] let match8 = r.match(/(\w)(\d)\1*\2+/g)
console.log('match8 :', match8) // match8 : [ 'E666' ]

 

posted @ 2019-04-24 16:51  青S衫%  阅读(7333)  评论(0编辑  收藏  举报