正则表达式是什么意思

正则表达式

/(?=\w{6})(?=\w*\d{2})/

前面的括号代表的什么
后面的括号代表的什么

这个表达式意义并不大,因为没有确定指定的字符,?=表示预匹配,匹配之后下一次匹配从匹配到的字符开始,预匹配的字符不计入匹配运算。

  1. 比如表达式/^a(?=c)$/,如字符串baceaq,能匹配ac的a,但是匹配不到aq的a
  2. 表达式/^a(?=c)e$/,字符串baceaq,是无论如何都匹配不到a的,因为预匹配的字符不计入匹配,也就是说,匹配完ac之后下一个匹配的字符是c而不是e
  3. 表达式/^a(?=c)c$/,字符串baceaq,匹配到的是ac,因为a后面有c,且下一个匹配的依旧是c,匹配到了ac。

从以上讨论一般来说?=一般用在结尾匹配,因为在?=再去匹配其他确切字符没有什么意义
正题:先举例一个有意义的a(?=\w{6});
\w代表匹配[a-zA-Z0-9_]中的一个字符,{6}表示出现六次,再加上?=,合起来就是预匹配a,要求a后面有6次[a-zA-Z0-9_]
举例:字符串a12_awAq,匹配到的是第一个a,但是匹配不到第5个a,因为第一个a后面有预匹配的要求,12_awA。而第5个后面有wAq,不足6个,因此匹配不到。
如果上述后面还需要匹配,则从1开始匹配。这也就是下面说的a(?=\w{6})(?=\w\d{2});
单独拆分a(?=\w
\d{2}),它的意思是匹配a后面出现 0~n 次[a-zA-Z0-9_],但是最后必须有2个[0-9];
a(?=\w{6})(?=\w*\d{2}),合起来的意思是匹配a(后面有6次[a-zA-Z0-9_])并且(0~n次[a-zA-Z0-9_]中,有两位必须是[0-9])
比如:a12_aA22a3e44,匹配结果是【a,a】,这两个a分别代表是前两个a,但是匹配不到第三个a,
原因

  1. 第一个a后面有,12_aA2,满足6次[a-zA-Z0-9_],12满足了后面的要求:出现了2次[a-zA-Z0-9_],最后两位为数字12。
  2. 第二个a后面有,A22a3e,满足6次[a-zA-Z0-9_],A22满足了后面的要求:出现了2次[a-zA-Z0-9_],最后两位为数字22。
  3. 第三个a后面为,3e44,不满足6次[a-zA-Z0-9_]。不匹配.

因此/(?=\w{6})(?=\w*\d{2})/就是匹配这样格式的空字符

第一个括号表示当前字符后面有6个字符是字母、数字或下划线
第二个括号表示当前字符后面有任意个字母、数字或下划线然后然后是两个数字

Look ahead positive (?=)
Find expression A where expression B follows:

A(?=B)

https://stackoverflow.com/questions/2973436/regex-lookahead-lookbehind-and-atomic-groups