2012-12-05 12 views
11

Ecco il mio problema. Ho una stringa con custodia mista. Voglio cercare a prescindere dal caso e quindi sostituire le partite con alcuni caratteri su entrambi i lati delle partite.Come cercare sostituire con regex e mantenere il caso come originale in javascript

Ad esempio:

var s1 = "abC...ABc..aBC....abc...ABC"; 
var s2 = s.replace(/some clever regex for abc/g, "#"+original abc match+"#"); 

Il risultato in s2 dovrebbe finire come:

"#abC#...#ABc#..#aBC#....#abc#...#ABC#" 

questo può essere fatto con regex? Se é cosi, come?

risposta

25

Questa operazione può essere eseguita utilizzando una funzione di richiamata per la regex sostitutiva.

var s1 = "abC...ABc..aBC....abc...ABC"; 

var s2 = s1.replace(/abc/ig, function (match) { 
    return "#" + match + "#" ; 
} 
); 

alert(s2); 

demo: http://jsfiddle.net/dxeE9/

+0

Suoni promettenti, puoi darmi un esempio – Graham

+0

Brillante - grazie – Graham

+0

@Graham mio non è brillante? ;-) È più breve e probabilmente più veloce ;-) –

15

Questo può essere fatto utilizzando un back-di riferimento:

var s2 = s.replace(/(your complex regex)/g, "#$1#") 

se si desidera far corrispondere "abc" in ogni caso:

var s2 = s.replace(/(abc)/ig, "#$1#") 
+0

quale sarebbe l'espressione regex? – Graham

+0

@Graham uguale al tuo. Ho pensato che "abc" fosse solo un segnaposto per qualcos'altro che sapevi già come abbinare. –

+0

Funziona anche - grazie – Graham

5

Puoi anche farlo

yourString.replace(/([a-z]+)/ig, "#$1#") 
+0

Sostituisce tutte le occorrenze con # abC# che non è quello che voglio – Graham

+0

@Graham puoi rimuovere 'g' se non vuoi abbinare tutte le occorrenze – Anirudha

Problemi correlati