首先你要理解正則中的分組和捕獲的概念,
用()括號括起來的匹配會是可獲取的,js里總共可以放9個對應用\1....\9來獲取重用。
var s = 'abbaabae3ee3abbfd43aaabbby65aabb3a';
var pattern1=/([a-z])/g;
在這里小寫字母就是一個組,正則匹配結果為:s.match(pattern1)

如果pattern1變為/([a-z])\1/g;那么其中的\1代表的就是([a-z])這個結果:
即:如果[a-z]匹配的是a,那么\1也是a,所以最終的正則匹配結果為:s.match(pattern1)

看以下正則:
var s1 = 'abbaa baabb e3ee3abbfd43aaabbby65aabb3a';
var pattern2=/([a-z])([a-z])\2\1{2,}/g;
s.replace(pattern2,function($4,$0,$1,$2){
console.log('$4:',$4,'$0:',$0,'$1:',$1,'$2:',$2)
});
結果為:

其中的$4代表的是正則匹配的最終結果的其中的一個子項,

粗線和細線部分;
console.log('最終的正則匹配結果為:',s.match(pattern2)):

重點聲明一下:
以下以$4為abbaa為例第一個紫色的匹配為例講解:

其中的$4,$0,$1,$2並沒有什么特定的規矩,只是自己隨意命名的,
$0表示\1所匹配的結果,即圖片中標紅的部分:在該字符串中匹配結果為a,

$1表示\2所匹配的結果,即圖片中標藍的部分:在該字符串中匹配結果為b,

正則中的\1{2,}代表重復次數最少2次,即\1第一個
為aa;
以上,結合正則理解如下:
var pattern2=/([a-z])([a-z])\2\1{2,}/g;

其中
匹配結果a,
匹配結果b,
匹配結果b,
匹配結果a,
匹配結果aa,綜上所述最終結果為
abbaa;
補充一點,對於最后的一個參數$2我不明白是啥意思,不知道有沒有大神解答一下,不勝感激。
最后說明一下:
console.log(s.replace(pattern2,function($4,$0,$1,$2){
//console.log('$4:',$4,'$0:',$0,'$1:',$1,'$2:',$2)
$4='test'
return $4;
}));

自己可以手動修改return返回值,然后修改正則結果。
思考題:
var s = 'abcabcc baa baabb e3ee3abbfd43aaabbby65aabb3a';
var pattern1=/([a-z])([a-z]([a-z]))\1\2\3/g;
s.replace(pattern1,function($4,$0,$1,$2){
console.log('$4:',$4,'$0:',$0,'$1:',$1,'$2:',$2)
});
以上的正則式如何分組和捕獲的。。???
答案如下:

