2012-05-15 8 views
213

ich eine Zeichenfolge mit mehreren Kommas haben, und die Zeichenfolge ersetzen Methode wird nur die eine erste ändern:JavaScript - Ersetzen Sie alle Kommas in einem String

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

Ergebnis: "thisnewcharis,a,test"

Die Dokumentation zeigt, dass der Standardwert alle ersetzt, und dass "-1" auch angibt, alle zu ersetzen, aber es ist nicht erfolgreich. Irgendwelche Gedanken?

+1

Welche Dokumentation? Der Standard - http://es5.github.com/#x15.5.4.11 - definiert keinen dritten Parameter und MDN - https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/ replace - Definiert einen nicht-standardmäßigen dritten Parameter als eine Zeichenfolge, die Flags repräsentiert, keine ganze Zahl ... –

Antwort

457

Sie können RegExp mit g Flag verwenden.

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

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

+1

Ausgezeichnete Antwort./g macht die globale Suche nach Komma und ersetzt es in der gesamten Zeichenfolge. Es funktioniert auf diese Weise, bin ich richtig ?? –

+0

Kannst du bitte detailliert beschreiben bezüglich/"Separator"/g – MSTdev

+1

@MSTdev Dies ist ein typischer * regulärer Ausdruck * mit 'g' Flag (a.k.a. *" globale Suche "*). Der Algorithmus ist einfach: Der reguläre Ausdruck findet ALLE Übereinstimmungen (hier Kommas) in der gegebenen Zeichenkette. Weitere Informationen zu regulären Ausdrücken in JavaScript finden Sie 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"); 

Verwenden Sie die globale (g) flag

Simple DEMO

+0

funktioniert nicht für var mystring = "this, is.a.test" mystring.replace (/./ g, ">"); Es ersetzt die ganze Zeichenfolge –

+0

@DineshJain In regex dot ('.') hat eine besondere Bedeutung, es bedeutet, jeder char, und wie alle anderen Sonderzeichen, muss mit' \ 'escaped werden, wenn Sie ihren Wert" wörtlich verwenden möchten ". Wenn Sie nur Punkte ersetzen möchten, müssen Sie '\ .' verwenden. – gdoron

+0

I hinzugefügt, um die String.prototype.replaceAll = function (Suche, Ersatz) { \t \t \t \t \t \t \t var target = Dieses; \t \t \t \t \t \t \t Rückkehr target.replace (neuer RegExp (Suche, 'g'), Ersatz); \t \t \t \t \t \t}; löst mein Problem @gdoron Thanks –

107

Just for fun:

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

Dies funktioniert ohne Regex, global, mit Variablen und Sonderzeichen (zB: '[' + Variable + ']'). Genius. –

+0

es ist eine gute Antwort, ich habe die "Ersetzen" -Funktion mit Punkten getestet.'aber es funktioniert nicht wie erwartet, aber Sie antworten, machte es gut –

+1

@SrednyMCasanova das ist, weil in Regex, der Zeitraum ist ein Sonderzeichen, und Sie sollten es mit '\.' Beispiel: 'var mystring =" das .,. is.,. a.,. test ";. mystring.replace (/\./ g, "|"); 'Siehe [MDN RegExp - Sonderzeichen Bedeutung in regulären Ausdrücken] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp # Sonderzeichen_bedeutend_in_regelmäßigen Ausdrücken) –

Verwandte Themen