430 Stimmen

JavaScript - Ersetzen aller Kommas in einer Zeichenkette

Ich habe eine Zeichenfolge mit mehreren Kommas, und die Methode zum Ersetzen von Zeichenfolgen ändert nur das erste Komma:

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

Ergebnis : "thisnewcharis,a,test"

Die Dokumentation gibt an, dass die Standardeinstellung alle ersetzt, und dass "-1" auch anzeigt, dass alle ersetzt werden sollen, aber es ist erfolglos. Irgendeine Idee?

903voto

VisioN Punkte 137670

Der dritte Parameter der String.prototype.replace() Funktion wurde nie als Standard definiert, so dass die meisten Browser sie einfach nicht implementieren. Sie wurde schließlich entfernt und ersetzt durch String.prototype.replaceAll() (siehe unten).


Moderne Lösung (2022)

使用方法 String.prototype.replaceAll() . Sie wird jetzt in allen Browsern und NodeJS unterstützt.

var myStr = "this,is,a,test";
var newStr = myStr.replaceAll(",", "-");

console.log( newStr );  // "this-is-a-test"

Die alte Methode ist die Verwendung einer regulärer Ausdruck をもって g ( weltweit ) Flagge

var myStr = "this,is,a,test";
var newStr = myStr.replace(/,/g, "-");

console.log( newStr );  // "this-is-a-test"
Haben Sie Probleme mit regulären Ausdrücken?

Es ist wichtig zu beachten, dass reguläre Ausdrücke Sonderzeichen, die escaped werden müssen . Wenn Sie zum Beispiel einen Punkt ( . ), sollten Sie das Zeichen /\./ Literal, da in der Regex-Syntax ein Punkt auf jedes einzelne Zeichen passt (außer auf Zeilenabschlüsse).

Wenn Sie eine Variable als Ersetzungszeichenfolge übergeben müssen, können Sie anstelle eines Regex-Literal eine RegExp Objekt und übergibt eine Zeichenkette als erstes Argument. Die üblichen Escape-Regeln (Voranstellen von Sonderzeichen mit \ wenn sie in einer Zeichenkette enthalten sind) notwendig sein wird.

function escapeRegex(str) {
    return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string
}

var myStr = "this.is.a.test";
var reStr = escapeRegex(".");
var newStr = myStr.replace(new RegExp(reStr, "g"), "-");

console.log( newStr );  // "this-is-a-test"

184voto

RobG Punkte 133037

Nur zum Spaß:

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

52voto

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

Verwenden Sie die globale( g ) Flagge

Einfache DEMO

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X