2016-01-01 16 views
5

Sto cercando di capire la seguente espressione regolare e perché mi sta dando il risultato che sto ottenendo.Ho bisogno di capire perché la regex non sta sostituendo tutte le corrispondenze

Ho la seguente javascript:

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

mi sarei aspettato risulta essere il valore del 7777, ma invece ha un valore di 77977.

Speravo che qualcuno potrebbe spiegare il motivo per cui io sono ottenendo un valore di 77977 e quello che avrei bisogno di cambiare per l'espressione regolare per farlo sostituire tutte le stringhe che hanno lo scalpiccio 797 a 77.

+0

regex di default non lo farà sovrapposizione partite. Senza considerare la sovrapposizione, hai due '797', in modo che vengano sostituiti con' 77' –

+0

Usa invece un ciclo. Sostituisci mentre il modello corrisponde. –

risposta

12

Quando una regex sostituisce la prima 797 con 77, esso non riesamina la ma che è stato sostituito (77), quindi viene visualizzato 9 successivo, quindi 797, che porta al risultato ottenuto.

+3

Una nota a margine, la regex per sostituire tutte le corrispondenze può essere ottenuta con una funzione lookahead. let result = '7979797'.replace (/ 79 (? = 7)/g,' 7 '); –

3

In alternativa, è possibile utilizzare il codice riportato di seguito per ottenere l'effetto desiderato.

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

Problemi correlati