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

SiwachGaurav Punkte 1848

Um alle Arten von Zeichen zu ersetzen, probieren Sie diesen Code aus:

Suppose we have need to send " and \ in my string, then we will convert it " to \" and \ to \\

Mit dieser Methode wird dieses Problem also gelöst.

String.prototype.replaceAll = function (find, replace) {
     var str = this;
     return str.replace(new RegExp(find.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'), 'g'), replace);
 };

var message = $('#message').val();
             message = message.replaceAll('\\', '\\\\'); /*it will replace \ to \\ */
             message = message.replaceAll('"', '\\"');   /*it will replace " to \\"*/

Ich verwendete Ajax, und ich musste Parameter im JSON-Format senden. Dann sieht meine Methode wie folgt aus:

 function sendMessage(source, messageID, toProfileID, userProfileID) {

     if (validateTextBox()) {
         var message = $('#message').val();
         message = message.replaceAll('\\', '\\\\');
         message = message.replaceAll('"', '\\"');
         $.ajax({
             type: "POST",
             async: "false",
             contentType: "application/json; charset=utf-8",
             url: "services/WebService1.asmx/SendMessage",
             data: '{"source":"' + source + '","messageID":"' + messageID + '","toProfileID":"' + toProfileID + '","userProfileID":"' + userProfileID + '","message":"' + message + '"}',
             dataType: "json",
             success: function (data) {
                 loadMessageAfterSend(toProfileID, userProfileID);
                 $("#<%=PanelMessageDelete.ClientID%>").hide();
                 $("#message").val("");
                 $("#delMessageContainer").show();
                 $("#msgPanel").show();
             },
             error: function (result) {
                 alert("message sending failed");
             }
         });
     }
     else {
         alert("Please type message in message box.");
         $("#message").focus();

     }
 }

 String.prototype.replaceAll = function (find, replace) {
     var str = this;
     return str.replace(new RegExp(find.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'), 'g'), replace);
 };

6voto

Raghavendra S Punkte 443

Schauen Sie sich diese Antwort an, vielleicht ist sie hilfreich und ich habe sie in meinem Projekt verwendet.

function replaceAll(searchString, replaceString, str) {
   return str.split(searchString).join(replaceString);
}
replaceAll('abc', '',"Test abc test test abc test test test abc test test abc" ); // "Test  test test  test test test  test test "

6voto

Vitim.us Punkte 18320

Meine Umsetzung, sehr selbsterklärend

function replaceAll(string, token, newtoken) {
    if(token!=newtoken)
    while(string.indexOf(token) > -1) {
        string = string.replace(token, newtoken);
    }
    return string;
}

6voto

Ferie Punkte 1172

In Bezug auf die Leistung im Zusammenhang mit den wichtigsten Antworten Hier einige Online-Tests .

Im Folgenden werden einige Leistungstests mit console.time() (sie funktionieren am besten in Ihrer eigenen Konsole, die Zeit ist sehr kurz, um in dem Schnipsel zu sehen)

console.time('split and join');
"javascript-test-find-and-replace-all".split('-').join(' ');
console.timeEnd('split and join')

console.time('regular expression');
"javascript-test-find-and-replace-all".replace(new RegExp('-', 'g'), ' ');
console.timeEnd('regular expression');

console.time('while');
let str1 = "javascript-test-find-and-replace-all";
while (str1.indexOf('-') !== -1) {
    str1 = str1.replace('-', ' ');
}
console.timeEnd('while');

Interessant ist, dass die Ergebnisse bei mehrfacher Ausführung immer unterschiedlich sind, obwohl die RegExp Lösung scheint im Durchschnitt die schnellste zu sein und die while Schleifenlösung am langsamsten.

6voto

Termininja Punkte 6127

Ich benutze p um das Ergebnis der vorherigen Rekursionsersetzung zu speichern:

function replaceAll(s, m, r, p) {
    return s === p || r.contains(m) ? s : replaceAll(s.replace(m, r), m, r, s);
}

Sie ersetzt alle Vorkommen in der Zeichenkette s bis es möglich ist:

replaceAll('abbbbb', 'ab', 'a')  'abbbb'  'abbb'  'abb'  'ab'  'a'

Um eine Endlosschleife zu vermeiden, prüfe ich, ob die Ersetzung r enthält eine Übereinstimmung m :

replaceAll('abbbbb', 'a', 'ab')  'abbbbb'

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