814 Stimmen

Schnellste Methode zum Ersetzen aller Instanzen eines Zeichens in einer Zeichenkette

Was ist der schnellste Weg, um alle Instanzen einer Zeichenfolge/Zeichen in einer Zeichenfolge in JavaScript zu ersetzen? A while , a for -Schleife, einen regulären Ausdruck?

4 Stimmen

Eine while- und eine for-Schleife würden beide mit einem einfachen Algorithmus in O(n) laufen. Nicht wirklich sicher, was ist die Zeitkomplexität für Javascript Regex-Engine in diesem Fall, aber meine Vermutung ist seine optimiert genug, um in O(n) für eine einfache String-Match laufen.

3 Stimmen

Dies scheint wie Mikro-Optimierung zu mir - hat Performance-Profiling zeigen die Zeichenfolge-Ersetzung zu den langsamsten Teil Ihres Programms sein?

0 Stimmen

Nein, ich habe mein Skript nicht einem Leistungsprofil unterzogen, ich wollte nur sicherstellen, dass ich die schnellste verfügbare Funktion verwende.

1318voto

Gumbo Punkte 617646

Am einfachsten wäre die Verwendung eines regulären Ausdrucks mit g Flagge, um alle Instanzen zu ersetzen:

str.replace(/foo/g, "bar")

Dies ersetzt alle Vorkommen von foo mit bar in der Zeichenkette str . Wenn Sie nur eine Zeichenkette haben, können Sie sie wie folgt in ein RegExp-Objekt umwandeln:

var pattern = "foobar",
    re = new RegExp(pattern, "g");

2 Stimmen

Str.replace(/foo/g, "bar") verursachte bei mir einen Fehler. str.replace(/foo/, "bar") funktioniert.

10 Stimmen

Warnung: Dies funktioniert nicht bei Strings, die Zeilenumbrüche enthalten. XRegExp verfügt über eine Ersetzungsmethode, die diesen Zweck erfüllt.

107 Stimmen

Mein innerer Pedant weist darauf hin, dass der Auftraggeber nach dem schnellsten und nicht nach dem einfachsten Verfahren gefragt hat

165voto

qwerty Punkte 1645

Versuchen Sie dieses replaceAll: http://dumpsite.com/forum/index.php?topic=4.msg8#msg8

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

Es ist sehr schnell, und es funktioniert unter ALLEN Bedingungen an denen viele andere scheitern:

"x".replaceAll("x", "xyz");
// xyz

"x".replaceAll("", "xyz");
// xyzxxyz

"aA".replaceAll("a", "b", true);
// bb

"Hello???".replaceAll("?", "!");
// Hello!!!

Lassen Sie es mich wissen, wenn Sie es knacken können oder etwas Besseres haben, aber stellen Sie sicher, dass es diese 4 Tests bestehen kann.

109voto

Sani Singh Huttunen Punkte 22657
var mystring = 'This is a string';
var newString = mystring.replace(/i/g, "a");

newString ist jetzt 'Das ist wie ein Strang'

65voto

Vlada Punkte 1583

Sie können auch versuchen:

string.split('foo').join('bar');

20voto

ssamuel68 Punkte 902

Sie können die folgenden Möglichkeiten nutzen:

newStr = str.replace(/[^a-z0-9]/gi, '_');

oder

newStr = str.replace(/[^a-zA-Z0-9]/g, '_');

Damit werden alle Zeichen, die keine Buchstaben oder Zahlen sind, durch ('_') ersetzt. Ändern Sie einfach den Wert des Unterstrichs für das Zeichen, das Sie ersetzen möchten.

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