我想弄清楚下面的正則表達式,以及它爲什麼給我我得到的結果。需要了解爲什麼正則表達式不會替換所有匹配
我有以下的javascript:
let result = '7979797'.replace(/797/g,'77');
我本來期望結果有7777的價值,而是它的77977.
我希望一個有價值的人可以解釋爲什麼我得到77977的值,我需要改變爲正則表達式來替換所有具有模式797到77的字符串。
我想弄清楚下面的正則表達式,以及它爲什麼給我我得到的結果。需要了解爲什麼正則表達式不會替換所有匹配
我有以下的javascript:
let result = '7979797'.replace(/797/g,'77');
我本來期望結果有7777的價值,而是它的77977.
我希望一個有價值的人可以解釋爲什麼我得到77977的值,我需要改變爲正則表達式來替換所有具有模式797到77的字符串。
當正則表達式替換第一個797
與77
時,它不會重新掃描ma特別它已經取代(77
),所以它看到9
接下來,然後797
,導致你得到的結果。
一個側面說明,替換所有匹配的正則表達式可以用一個前瞻函數來實現。 let result ='7979797'.replace(/ 79(?= 7)/ g,'7'); –
作爲替代方案,我們可以使用下面的代碼來達到預期的效果。
var input = '7979797';
var reg = /797/;
while(reg.test(input)){
input = input.replace(reg,'77')
}
console.log(input)
正則表達式默認情況下不會做重疊的匹配。如果不考慮重疊,你有兩個'797',所以它將被替換爲'77' –
改爲使用循環。在模式匹配時進行替換。 –