2015-12-12 26 views
14

Ich habe eine Zeichenfolge als "1,23,45,448.00" und ich möchte alle Kommata durch Komma und alle Dezimalpunkte durch Komma ersetzen.Ersetzen, (Komma) durch. (Punkt) und. (Punkt) durch, (Komma)

Meine erforderliche Ausgabe ist "1.23.45.448,00"

Ich habe versucht , durch . wie folgt zu ersetzen:

var mystring = "1,23,45,448.00" 
alert(mystring.replace(/,/g , ".")); 

Aber danach, wenn ich versuche, . zu ersetzen durch , es ersetzt auch die erste . durch , ersetzt wodurch die Ausgabe als "1,23,45,448,00"

+0

So? Was funktioniert nicht für dich? –

+0

@AdamAzad Wenn zuerst '.' (_oder Komma_) ersetzt wird, wird der andere ersetzen den ersten ersetzen ersetzen. – Tushar

+1

@Tushar, sollten diese Details in der Frage vorhanden sein, anstatt in einem Kommentar. Gute Qualitätsfragen sollten das Problem ausreichend beschreiben, ohne dass die Problemdetails in den Kommentaren ** unbedingt ** hinzugefügt werden müssen. Eine gute Beschreibung ist: ** 1) was ich will ** dann ** 2) was ich tue ** und schließlich ** 3) was tatsächlich passiert ** –

Antwort

16

Verwendung geben replace mit Rückruffunktion, die , durch . und . durch , ersetzt. Der zurückgegebene Wert aus der Funktion wird verwendet, um den übereinstimmenden Wert zu ersetzen.

var mystring = "1,23,45,448.00"; 
 

 
mystring = mystring.replace(/[,.]/g, function (m) { 
 
    // m is the match found in the string 
 
    // If `,` is matched return `.`, if `.` matched return `,` 
 
    return m === ',' ? '.' : ','; 
 
}); 
 

 
console.log(mystring); 
 
document.write(mystring);

Regex: Die Regex [,.] wird irgendeine der Komma oder Dezimalpunkt entsprechen.

String#replace() mit der Callback-Funktion wird das Spiel als Parameter (m) erhalten, die entweder , oder . und der Wert, der von der Funktion zurückgegeben wird, verwendet wird, um das Spiel zu ersetzen.

So, wenn der erste , von der Saite wird

abgestimmt
m = ','; 

Und in der Funktion return m === ',' ? '.' : ',';

entspricht als

if (m === ',') { 
    return '.'; 
} else { 
    return ','; 
} 

So Im Grunde ist dies , durch . ersetzt und . von , in der Zeichenfolge.

+0

Könnten Sie bitte mehr erklären, was in dieser Zeile vor sich geht: 'return m === ','? ".':', '; ' – digglemister

+0

@snookieordie, siehe [dies] (http://Stackoverflow.com/a/8897859/2151050) für die Zukunft. –

+0

@snookieordie Wenn m == ',' wird es zu dieser Zeit in '.' andere weise ',' wird akzeptiert. ' bedingter Operator. – RajeeshMenoth

3

Nichts falsch mit Tushar Ansatz, aber hier ist eine andere Idee:

myString 
    .replace(/,/g , "__COMMA__") // Replace `,` by some unique string 
    .replace(/\./g, ',')   // Replace `.` by `,` 
    .replace(/__COMMA__/g, '.'); // Replace the string by `.` 
Verwandte Themen