2016-01-01 57 views
5

我想弄清楚下面的正則表達式,以及它爲什麼給我我得到的結果。需要了解爲什麼正則表達式不會替換所有匹配

我有以下的javascript:

let result = '7979797'.replace(/797/g,'77'); 

我本來期望結果有7777的價值,而是它的77977.

我希望一個有價值的人可以解釋爲什麼我得到77977的值,我需要改變爲正則表達式來替換所有具有模式797到77的字符串。

+0

正則表達式默認情況下不會做重疊的匹配。如果不考慮重疊,你有兩個'797',所以它將被替換爲'77' –

+0

改爲使用循環。在模式匹配時進行替換。 –

回答

12

當正則表達式替換第一個79777時,它不會重新掃描ma特別它已經取代(77),所以它看到9接下來,然後797,導致你得到的結果。

+3

一個側面說明,替換所有匹配的正則表達式可以用一個前瞻函數來實現。 let result ='7979797'.replace(/ 79(?= 7)/ g,'7'); –

3

作爲替代方案,我們可以使用下面的代碼來達到預期的效果。

var input = '7979797'; 
 
var reg = /797/; 
 
while(reg.test(input)){ 
 
    input = input.replace(reg,'77') 
 
} 
 
console.log(input)

相關問題