2017-04-19 4 views
0

Ich versuche, Regex zu ersetzen, mit einer Regex habe ich. Wenn ich die Übereinstimmungsmethode verwende, wird das Array mit dem richtigen Index und der passenden Übereinstimmung zurückgegeben, aber wenn ich replace verwende und den Ersetzungsstring hinzufügt, würde es nicht funktionieren.Javascript Regex funktioniert, aber ersetzen funktioniert nicht

var a = "$#,##0.00".match("[\\d+-,#;()\\.]+"); 
console.log(a); 

Rückgabe ["#,##0.00", index: 1, input: "$#,##0.00"].

var b = "$#,##0.00".replace("[\\d+-,#;()\\.]+",""); 
console.log(b); 

Returns $#,##0.00 während ich erwarte, dass es zurück nur die $

jemand kann darauf hinweisen, was ich falsch mache? Dank Link zum Beispiel ist:

var a = "$#,##0.00".match("[\\d+-,#;()\\.]+"); 
 
console.log(a); 
 
var b = "$#,##0.00".replace("[\\d+-,#;()\\.]+",""); 
 
console.log(b);

+0

Sie vorbei eine Zeichenfolge 'replace()'? – adeneo

+0

Ja, eine leere Zeichenfolge, da ich nur $ als Ergebnis haben möchte – phantomsays

Antwort

3

.match nur akzeptiert regexps. Wenn also eine Zeichenfolge bereitgestellt wird, konvertiert .match diese explizit in eine Regexp mit new RegExp.

.replace akzeptiert jedoch sowohl eine Zeichenkette (die wörtlich als die Suche genommen wird) oder eine Regexp, müssen Sie in einer Regexp übergeben, wenn Sie eine Regexp verwenden möchten.

var b = "$#,##0.00".replace(new RegExp("[\\d+-,#;()\\.]+"), ""); 
//       ^^^^^^^^^^^    ^

oder mit einem regexp wörtlichen:

var b = "$#,##0.00".replace(/[\d+-,#;()\.]+/, ""); 
+0

ohh! Ich wusste das nicht, ich dachte, replace verbraucht standardmäßig eine reg exp. Danke für das Zeigen, dass – phantomsays

+1

+1 zu beantworten, nur auf einen anderen möglichen Weg: var a = "$ #, ## 0.00"; var b = a.replace (a.match ("[\\ d + -, #;() \\.] +"), ""); Funktioniert auch, weil a.match (...) eine Zeichenfolge ist – repeatdomiau

+0

@GabrielMilitello Der schnellste Weg von den USA nach Japan ist über den Atlantik, wie? : D. –

Verwandte Themen