正則表達式中的\2和\1和\3不僅分組還占位


首先你要理解正則中的分組和捕獲的概念,

用()括號括起來的匹配會是可獲取的,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)
});

 以上的正則式如何分組和捕獲的。。???

答案如下:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM