2010-06-23 18 views
8

La seguente dichiarazione in JavaScript funziona come previsto:Come sostituire tutti i caratteri in una stringa utilizzando JavaScript per questo caso specifico: sostituire. by _

var s1 = s2.replace(/ /gi, '_'); //replace all spaces by the character _ 

Tuttavia, per sostituire tutte le occorrenze del carattere. dal carattere _, ho:

var s1 = s2.replace(/./gi, '_'); 

ma il risultato è una stringa interamente riempita con il carattere _

Perché e come sostituire. usando _ JavaScript?

risposta

25

. il carattere in un'espressione regolare corrisponde a tutto. Hai bisogno di fuggire, poiché si vuole un carattere punto letterale:

var s1 = s2.replace(/\./gi, '_'); 
6

avete bisogno di sfuggire il punto, dal momento che è un carattere speciale nel regex

s2.replace(/\./g, '_'); 

Nota che punteggiano non richiede fuga nelle classi di caratteri, quindi, se si voleva sostituire i punti e spazi con sottolineature in un colpo solo, si potrebbe fare:

s2.replace(/[. ]/g, '_'); 

Utilizzando i bandiera è irrilevante in questa sede, come w ell come nella tua prima espressione regolare.

4

È inoltre possibile utilizzare le stringhe anziché le espressioni regolari.

var s1 = s2.replace ('.', '_', 'gi') 
+0

+1 Buon punto - regex è eccessivo qui. (inserire la citazione J.Z. in 3 ... 2 ... 1 ...) – Piskvor

+1

Il 3 ° parametro non è standard. Non tutti i browser lo supporteranno. Vedere questo https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/String/replace – HoLyVieR

1

C'è anche questo che funziona bene anche:

var s1 = s2.split(".").join("_"); // Replace . by _ // 
+0

che è un approccio molto strano – SilentGhost

+0

beh, è ​​l'unico che non richiede affatto RegExp. – HoLyVieR

+0

Questo è un approccio diverso, è meglio sostituire che sostituisce solo la prima occorrenza – Abhi

Problemi correlati