2010-03-12 9 views
19

Wie der Titel, ich brauche alle Vorkommen des $ -Zeichen in einem String-Variable mit einem Unterstrich relace.

Ich habe versucht:

str.replace(new RegExp('$', 'g'), '_'); 

Aber das ist für mich nicht funktioniert und wird nichts ersetzt.

Antwort

39

Die $ in RegExp ist ein Sonderzeichen, so dass Sie es mit Backslash entkommen müssen.

new_str = str.replace(new RegExp('\\$', 'g'), '_'); 

jedoch in JS können Sie die einfachere Syntax

new_str = str.replace(/\$/g, '_'); 
+2

+1, gehen Sie für die wörtlichen, nicht mit dem Konstruktor stören, wenn Sie Variablen in regulären Ausdrücken verwenden müssen. –

1

........

str.replace(new RegExp('\\$', 'g'), '_'); 

Becaue $ in js spezielle Zeichen ist, müssen Sie es entkommen.

+1

Die Sekunde ist in zwei Punkten falsch, es ersetzt '\ $', nicht '$' und es ersetzt nur ein Vorkommen, nicht ein Vielfaches. –

+0

@Andy: Ja, klar, dass es und entfernt es bald :) Danke – Sarfraz

8

Sie brauchen nicht RegExp zu verwenden. Sie können die wörtliche Syntax:

str.replace(/\$/g, '_') 

Sie einfach den $ Charakter entkommen müssen, wie es ein Sonderzeichen in regulären Ausdrücken ist, die das Ende des Strings markiert.


bearbeiten Oh, können Sie auch split und join dieses Problem zu lösen:

str.split("$").join("_") 
+0

Wie die Split und Join-Idee - wie schnell ist es im Vergleich zu einem Regex, frage ich mich? –

-3

Sie keine regulären Ausdrücke müssen nur ein Symbol ersetzen:

newStr = oldStr.replace('$', '_') 
+4

Der Titel gab "alle" Vorkommen an. – kennytm

+0

https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/String/replace – user187291

+0

Dies ersetzt nur das erste Vorkommen des Symbols, nicht „alle“ Vorkommen. Bitte entferne diese Antwort, da es offensichtlich falsch ist – edc65

Verwandte Themen