5465 Stimmen

Ersetzen aller Vorkommen einer Zeichenkette in JavaScript

Ich habe diese Zeichenfolge in meinem JavaScript-Code:

"Test abc test test abc test test test abc test test abc"

Tun:

str = str.replace('abc', '');

Scheint nur das erste Vorkommen von abc in der obigen Zeichenfolge.

Wie kann ich die alle Vorkommnisse davon?

6voto

tk_ Punkte 14471

Sie können einfach die folgende Methode anwenden

/**
 * Replace all the occerencess of $find by $replace in $originalString
 * @param  {originalString} input - Raw string.
 * @param  {find} input - Target key word or regex that need to be replaced.
 * @param  {replace} input - Replacement key word
 * @return {String}       Output string
 */
function replaceAll(originalString, find, replace) {
  return originalString.replace(new RegExp(find, 'g'), replace);
};

6voto

Sandeep Gantait Punkte 791

Die folgende Funktion funktioniert bei mir:

String.prototype.replaceAllOccurence = function(str1, str2, ignore)
{
    return this.replace(new RegExp(str1.replace(/([\/\,\!\\\^\$\{\}\[\]\(\)\.\*\+\?\|\<\>\-\&])/g,"\\$&"),(ignore?"gi":"g")),(typeof(str2)=="string")?str2.replace(/\$/g,"$$$$"):str2);
} ;

Rufen Sie nun die Funktionen wie folgt auf:

"you could be a Project Manager someday, if you work like this.".replaceAllOccurence ("you", "I");

Kopieren Sie einfach diesen Code und fügen Sie ihn in die Konsole Ihres Browsers ein, um ihn zu testen.

5voto

Ashish Punkte 1808

Methode 1

Versuchen Sie, einen regulären Ausdruck zu implementieren:

"Test abc test test abc test test test abc test test abc".replace(/ \abc /g, ' ');

Methode 2

Trennen und verbinden. Trennen mit abc und verbinden mit Leerzeichen.

"Test abc test test abc test test test abc test abc".split("abc").join(" ")

5voto

CertainPerformance Punkte 306402

Es gibt jetzt eine fertiger Vorschlag zur Eingliederung String.prototype.replaceAll in die offizielle Spezifikation aufgenommen. Letztendlich müssen die Entwickler keine eigenen Implementierungen für replaceAll - stattdessen werden moderne Javascript-Engines dies von Haus aus unterstützen.

Der Vorschlag befindet sich in Phase 4, die bedeutet dass alles vollständig ist und nur noch die Browser mit der Umsetzung beginnen müssen.

Es hat ausgeliefert in den neuesten Versionen von Chrome, Firefox und Safari.

Hier sind die Einzelheiten der Umsetzung:

Gemäß dem aktuellen TC39-Konsens, String.prototype.replaceAll verhält sich identisch zu String.prototype.replace in allen Fällen, außer für die beiden folgenden Fälle:

  1. Si searchValue ist eine Zeichenkette, String.prototype.replace ersetzt nur ein einziges Vorkommen der searchValue in der Erwägung, dass String.prototype.replaceAll Ersetzt alle Vorkommen des searchValue (als ob .split(searchValue).join(replaceValue) oder ein globaler regulärer Ausdruck mit korrekten Großbuchstaben verwendet wurde).
  2. Si searchValue ist ein nicht-globaler regulärer Ausdruck, String.prototype.replace ersetzt einen einzelnen Treffer, während String.prototype.replaceAll eine Ausnahme auslöst. Dies geschieht, um die inhärente Verwirrung zwischen dem Fehlen eines globalen Kennzeichens (das "NICHT alles ersetzen" impliziert) und dem Namen der aufgerufenen Methode (der stark auf "alles ersetzen" hindeutet) zu vermeiden.

Bemerkenswert, String.prototype.replaceAll verhält sich genau wie String.prototype.replace wenn searchValue ist ein globaler regulärer Ausdruck.

Sie können eine spezifizierungskonforme Polyfill sehen aquí .

In unterstützten Umgebungen wird das folgende Snippet protokolliert foo-bar-baz , ohne einen Fehler zu verursachen:

const str = 'foo bar baz';
console.log(
  str.replaceAll(' ', '-')
);

5voto

User Punkte 21953

Die meisten Leute tun dies wahrscheinlich, um eine URL zu kodieren. Um eine URL zu kodieren, sollten Sie nicht nur Leerzeichen berücksichtigen, sondern die gesamte Zeichenkette richtig mit encodeURI .

encodeURI("http://www.google.com/a file with spaces.html")

zu bekommen:

http://www.google.com/a%20file%20with%20spaces.html

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