2012-05-15 17 views
213

ho una stringa con più virgole, e la stringa sostituire metodo cambierà solo il primo:JavaScript - Sostituire tutte le virgole in una stringa

var mystring = "this,is,a,test" 
mystring.replace(",","newchar", -1) 

Risultato: "thisnewcharis,a,test"

La documentazione indica che il valore predefinito sostituisce tutto e che "-1" indica anche di sostituire tutto, ma non ha esito positivo. qualche idea?

+1

Quale documentazione? Lo standard - http://es5.github.com/#x15.5.4.11 - non definisce un terzo parametro e MDN - https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/ replace - definisce un terzo parametro non standard come una stringa che rappresenta i flag, non un intero ... –

risposta

457

È possibile utilizzare RegExp con il flag g.

var mystring = "this,is,a,test" 
mystring.replace(/,/g , "newchar"); 

DEMO:http://jsfiddle.net/d4N9s/

+1

Risposta eccellente./g effettua la ricerca globale della virgola e la sostituisce nell'intera stringa. Funziona in questo modo, sono corretto ?? –

+0

Puoi descrivere in dettaglio in// "Seprator"/g – MSTdev

+1

@MSTdev Questa è una tipica espressione * regolare * con il flag 'g' (a.k.a. *" ricerca globale "*). L'algoritmo è semplice: l'espressione regolare trova TUTTE le corrispondenze (qui le virgole) nella stringa data. Ulteriori informazioni sulle espressioni regolari in JavaScript sono disponibili in [** MDN **] (https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions#Advanced_searching_with_flags). – VisioN

29
var mystring = "this,is,a,test" 
mystring.replace(/,/g, "newchar"); 

Utilizzare la (g) flag globale

Simple DEMO

+0

non funziona per var mystring = "this, is.a.test" mystring.replace (/./g, ">"); Sostituisce l'intera stringa –

+0

@DineshJain Nel punto di regex ('.') ha un significato speciale, significa che ogni carattere e, come tutti gli altri caratteri speciali, deve essere preceduto da escape con' \ 'se si desidera utilizzare il loro valore" letteralmente ". se vuoi sostituire solo i punti devi usare '\ .'. – gdoron

+0

ho aggiunto la String.prototype.replaceAll = function (di ricerca, sostituzione) { \t \t \t \t \t \t \t var target = questo; \t \t \t \t \t \t \t ritorno target.replace (nuova RegExp (ricerca, 'g'), la sostituzione); \t \t \t \t \t \t}; risolve il mio problema @gdoron Grazie –

107

Solo per divertimento:

var mystring = "this,is,a,test" 
var newchar = '|' 
mystring = mystring.split(',').join(newchar); 
+0

Funziona senza Regex, globaly, con variabili e caratteri speciali (es: '[' + variable + ']'). Genio. –

+0

è una buona risposta, ho testato la funzione 'replace' con punti '.'ma non funziona come previsto, ma la tua risposta lo ha reso buono –

+1

@SrednyMCasanova perché nella regex il periodo è un carattere speciale, e dovresti scappare con '\ .' Esempio:' var mystring = "questo ......, è, un test "; mystring.replace (/\./g, "|"); 'Vedi [MDN RegExp - Caratteri speciali che significano nelle espressioni regolari] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp # Special_characters_meaning_in_regular_expressions) –

Problemi correlati