String.prototype.replace()


Die replace()-Methode gibt eine neue Zeichenkette zur├╝ck, in der einige oder alle ├ťbereinstimmungen mit einem Muster durch einen Ersatz ausgetauscht wurden. Das Muster kann eine Zeichenkette oder eine RegExp sein, als Ersatz dienen eine Zeichenkette oder eine Funktion, welche f├╝r jede ├ťbereinstimmung aufgerufen wird.

Syntax

str.replace(regexp|substr, newSubStr|function);

Parameter

regexp
Ein RegExp-Objekt. Die ├ťbereinstimmung wird durch den R├╝ckgabewert aus Parameter #2 ersetzt.
substr
Eine Zeichenkette, welche durch newSubStr ersetzt werden soll. Nur das erste Vorkommen wird ersetzt.
newSubStr
Die Zeichenkette, welche den Substring aus Parameter #1 ersetzt. Eine Anzahl spezieller Ersetzungsmuster wird unterst├╝tzt, siehe den "Eine Zeichenkette als Parameter angeben"-Abschnitt weiter unten.
function
Eine Funktion, welche aufgerufen wird, um den neuen Substring zu erzeugen, der an Stelle des gefundenen Substrings aus Parameter #1 stehen soll. Die Argumente f├╝r diese Funktion werden im "Eine Funktion als Parameter angeben"-Abschnitt unten erl├Ąutert.

R├╝ckgabe

Eine neue Zeichenkette, in der einige oder alle ├ťbereinstimmungen mit einem Muster durch einen Ersatz ausgetauscht wurden.

Beschreibung

Diese Methode ├Ąndert nicht das String-Objekt, auf welchem sie aufgerufen wird. Sie gibt lediglich einen neuen String zur├╝ck.

Um ein globales Suchen und Ersetzen durchzuf├╝hren, setzen Sie den g-Umschalter im Regul├Ąren Ausdruck.

Eine Zeichenkette als Parameter angeben

Die Ersatzzeichenkette kann folgende spezielle Ersetzungsmuster beinhalten:

Pattern Inserts
$$ F├╝gt ein "$" ein.
$& F├╝gt den gefundenen Substring ein.
$` F├╝gt den Stringteil vor dem gefundenen Substring ein.
$' F├╝gt den Stringteil nach dem gefundenen Substring ein.
$n Mit n als nicht negative ganze Zahl kleiner als 100 wird der nte eingeklammerte Submatch-String eingef├╝gt, der im ersten Argument in der RegExp angegeben wurde.

Eine Funktion als Parameter angeben

Sie k├Ânnen eine Funktion als zweiten Parameter angeben. In diesem Fall wird diese Funktion aufgerufen, nachdem die Suche ausgef├╝hrt wurde. Der R├╝ckgabewert der Funktion wird als Ersatz eingesetzt. (Anmerkung: Die oben genannten speziellen Ersetzungsmuster werden in diesem Fall nicht beachtet.) Bedenken Sie, dass die Funktion f├╝r jede ├ťbereinstimmung erneut aufgerufen wird, wenn der regul├Ąre Ausdruck im ersten Parameter den global-Flag gesetzt hat.

Die Argumente dieser Funktion lauten wie folgt:

M├Âglicher Name Gelieferter Wert
match Der gefundene Substring. (Entspricht $& oben.)
p1, p2, ... Der nth eingeklammerte Submatch-String, fall im ersten Argument ein RegExp-Objekt angegeben wurde. (Entspricht $1, $2, etc. oben.) Wurde zum Beispiel /(\a+)(\b+)/ angegeben, so ist p1 die ├ťbereinstimmung f├╝r \a+, und p2 f├╝r \b+.
offset Die Position, an welcher der gefundene Substring innerhalb der gesamten Zeichenkette gefunden wurde. War zum Beispiel die gesamte Zeichenkette "abcd" und der gefundene Substring "bc", dann w├Ąre das Argument 1.)
string Die gesamte Zeichenkette, welche durchsucht wird.

(Die genaue Anzahl der Argumente h├Ąngt davon ab, ob das erste Argument eine RegExp war und wieviele eingeklammerte Submatches in diesem Fall angegeben wurden.)

Das folgende Beispiel wird newString auf "abc - 12345 - #$*%" setzen:

function replacer(match, p1, p2, p3, offset, string){
  // p1 is nondigits, p2 digits, and p3 non-alphanumerics
  return [p1, p2, p3].join(' - ');
}
newString = "abc12345#$*%".replace(/([^\d]*)(\d*)([^\w]*)/, replacer);

Beispiele

Beispiel: Definieren des regul├Ąren Ausdrucks in replace

Globales Ersetzen kann nur mit einem regul├Ąren Ausdruck durchgef├╝hrt werden. Im folgenden Beispiel wird der regul├Ąre Ausdruck in replace definiert und beinhaltet den Schalter ignore case.

var str = "Twas the night before Xmas...";
var newstr = str.replace(/xmas/i, "Christmas");
print(newstr);

Dies erzeugt die Ausgabe "Twas the night before Christmas..."

Beispiel: Nutzung von global und ignore mit replace

Das nachfolgende Beispiel enth├Ąlt einen regul├Ąren Ausdruck, der sowohl das global als auch das ignore Flag gesetzt hat. Dadurch wird von replace jedes Vorkommnis von 'apples' in der Zeichenkette durch 'oranges' ersetzt.

var re = /apples/gi;
var str = "Apples are round, and apples are juicy.";
var newstr = str.replace(re, "oranges");
print(newstr);

Dies erzeugt die Ausgabe "oranges are round, and oranges are juicy."

Beispiel: Vertausche W├Ârter in Strings

Im folgenden Skript werden die W├Ârter in dem String getauscht. F├╝r die Vertauschung im Text nutzt das Skript die Ersetzungspatterns $1 und $2.

var re = /(\w+)\s(\w+)/;
var str = "John Smith";
var newstr = str.replace(re, "$2, $1");
print(newstr);

Die Ausgabe ist: "Smith, John".

Beispiel: Nutzung von Inline-Funktionen, die die erkannten Zeichen modifizieren

In diesem Beispiel werden alle Gro├čbuchstaben durch einen Bindestrich und den entsprechenden Kleinbuchstaben ersetzt. Der wichtige Punkt in dem Beispiel ist, dass der Additions-Operator (Konkatination) vor dem Zur├╝ckgeben der neuen Zeichenkette erfolgen muss.

Die Ersetzungsfunktion bekommt das erkannte Muster als Parameter ├╝bergeben und benutzt diesen, um den Buchstaben zu transformieren und ihn mit dem Bindestrich zu verbinden. Zum Schluss wird das Ergebnis zum Ersetzen zur├╝ckgegeben.

function styleHyphenFormat(propertyName) {
  function upperToHyphenLower(match) {
    return '-' + match.toLowerCase();
  }
  return propertyName.replace(/[A-Z]/g, upperToHyphenLower);
}

Gegeben styleHyphenFormat('borderTop'), gibt 'border-top' zur├╝ck.

Weil das Ergebnis transformiert werden soll, bevor die finale Ersetzung durchgef├╝hrt wird, muss eine Funktion eingesetzt werden. Dieses erzwingt die Ausf├╝hrung von toLowerCase(). Wenn man das gleiche versucht ohne eine Funktion zu benutzen, wird die toLowerCase() Methode ohne Wirkung sein.

var newString = propertyName.replace(/[A-Z]/g, '-' + '$&'.toLowerCase());  // won't work

Dieses ist weil '$&'.toLowerCase() ausgef├╝hrt wird, bevor der String als Pattern genutzt wird.

Beispiel: Grad Fahrenheit in Celsius-Grad umwandeln

Das folgende Beispiel ersetzt einen Wert in Grad Fahrenheit durch den entsprechenden Celsius-Wert. Der Fahrenheitwert sollte eine Nummer sein, die mit einem F endet. Die Funktion gibt eine Celsius-Temperatur mit der Endung C aus. Ist zum Beispiel der Eingabewert 212F, so gibt die Funktion 100C zur├╝ck. Ist die Nummer 0F, so wird -17,77777777777778C zur├╝ck gegeben.

Der regul├Ąre Ausdruck test pr├╝ft jede Nummer, die mit F endet. Die Nummer in Grad Fahrenheit ist durch den zweiten Funktionsparameter, p1, ansprechbar. Die Funktion setzt den Celsiuswert basierend auf dem Fahrenheitwert in einer Zeichenkette in der f2c-Funktion. f2c gibt dann den Celsiuswert zur├╝ck. Diese Funktion ├Ąhnelt dem s///e-Flag in Perl.

function f2c(x) {
  function convert(str, p1, offset, s) {
    return ((p1-32) * 5/9) + "C";
  }
  var s = String(x);
  var test = /(\d+(?:\.\d*)?)F\b/g;
  return s.replace(test, convert);
}

Beispiel: Verwenden einer inline-Funktion mit einem regul├Ąrem Ausdruck um Schleifen zu vermeiden

Das folgende Beispiel nimmt eine Zeichenkettenmuster und konvertiert es in ein Array von Objekten.

Eingabe:
Eine Zeichenkette, die aus den Zeichen x, - und _ besteht

x-x_
x---x---x---x---
x-xxx-xx-x-
x_x_x___x___x___
Ausgabe:
Ein Array mit Objekten. Ein 'x' zeigt einen 'an'-Status an, ein '-' (Bindestrich) symbolisiert einen 'aus'-Status und ein '_' (Unterstrich) gibt die L├Ąnge des 'an'-Status an.
[
  { on: true, length: 1 },
  { on: false, length: 1 },
  { on: true, length: 2 }
  ...
]
Ausschnitt:
var str = 'x-x_';
var retArr = [];
str.replace(/(x_*)|(-)/g, function(match, p1, p2){
  if(p1) retArr.push({ on: true, length: p1.length });
  if(p2) retArr.push({ on: false, length: 1 });
});

console.log(retArr);
Der Ausschnitt generiert ein Array mit drei Objekten im gew├╝nschten Format, ohne eine Schleife zu verwenden.

Spezifikationen

Browserkompatibilit├Ąt

Wir konvertieren die Kompatibilit├Ątsdaten in ein maschinenlesbares JSON Format. Diese Kompatibilit├Ątstabelle liegt noch im alten Format vor, denn die darin enthaltenen Daten wurden noch nicht konvertiert. Finde heraus wie du helfen kannst!
Eigenschaft Chrome Firefox (Gecko) Internet Explorer Opera Safari
Grundlegende Unterst├╝tzung (Ja) (Ja) (Ja) (Ja) (Ja)
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Grundlegende Unterst├╝tzung (Ja) (Ja) (Ja) (Ja) (Ja) (Ja)

Firefox-spezifische Bemerkungen

  • Mit dem Start von Gecko 27 (Firefox 27 / Thunderbird 27 / SeaMonkey 2.24), wurde diese Methode an die ECMAScript Spezifikation angepasst. Wenn replace() mit einem globalen regul├Ąren Ausdruck aufgerufen wird, wird die RegExp.lastIndex Eigenschaft (wenn sie Spezifiziert wurde) auf 0 zur├╝ckgesetzt (Bug 501739).
  • Mit dem Start von Gecko 39 (Firefox 39 / Thunderbird 39 / SeaMonkey 2.36) wurden das nicht standardisierte flags Argument als deprecated markiert und wirft eine Warnung in der Konsole (Bug 1142351).
  • Mit dem Start von Gecko 47 (Firefox 47 / Thunderbird 47 / SeaMonkey 2.44) wurden das nicht standardisierte flags Argument  nicht l├Ąnger in Nicht-Release-Builds unterst├╝tzt und wird bald vollst├Ąndig entfernt (Bug 1245801).
  • Mit dem Start von Gecko 49 (Firefox 49 / Thunderbird 49 / SeaMonkey 2.46) wurden das nicht standardisierte flags Argument nicht mehr unterst├╝tzt (Bug 1108382).

Siehe auch