Wie kann ein Schrägstrich in einer JavaScript-Zeichenfolge global ersetzt werden?


129

Wie kann ein Schrägstrich in einer JavaScript-Zeichenfolge global ersetzt werden?

Antworten:


255

Folgendes würde aber nur ein Vorkommen ersetzen:

"string".replace('/', 'ForwardSlash');

Für einen globalen Ersatz oder wenn Sie reguläre Ausdrücke bevorzugen, müssen Sie sich nur dem Schrägstrich entziehen:

"string".replace(/\//g, 'ForwardSlash');

3
Das erste Snippet ersetzt nicht global. Ich bin mir nicht sicher, wie ich das globale Ersetzen ohne Regex durchführen soll.
BoltClock

Ah richtig, ich habe es nicht mit mehr als einem Schrägstrich versucht. Es könnte damit gemacht werden, "string".replace('/', 'ForwardSlash', 'g')aber das ist ein nicht standardmäßiges Argument, das nur in Firefox afaik funktioniert.
Seldaek

1
"string".replace(/\//g, 'ForwardSlash');funktioniert, aber entfernen Sie das / g daraus und es funktioniert nicht.
johntrepreneur

1
@johntrepreneur das g gibt an, dass es sich um einen globalen Ersatz handelt, dh es ersetzt alle Instanzen des Matched /. Ohne das g wird nur eine Instanz ersetzt. Und wenn Sie entfernen /g, brechen Sie den regulären Ausdruck vollständig, da das letzte / das Endtrennzeichen ist.
Seldaek

1
@RameshRajendran So ist die API eben. Standardmäßig wird sie nur einmal ersetzt und stoppt dann, wenn eine zu ersetzende gefunden wurde. Siehe auch developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Seldaek

27

Verwenden Sie ein Regex-Literal mit dem gModifikator und umgehen Sie den Schrägstrich mit einem Backslash, damit er nicht mit den Trennzeichen kollidiert.

var str = 'some // slashes', replacement = '';
var replaced = str.replace(/\//g, replacement);

7

Ohne Verwendung von Regex (obwohl ich dies nur tun würde, wenn die Suchzeichenfolge vom Benutzer eingegeben wird):

var str = 'Hello/ world/ this has two slashes!';
alert(str.split('/').join(',')); // alerts 'Hello, world, this has two slashes!' 

4

Ist das was du willst?

'string with / in it'.replace(/\//g, '\\');

4

Das hat sich für mich als "//"gerecht erwiesen "/".

str.replace(/\/\//g, '/');

2

Sie müssen den Schrägstrich umbrechen, um browserübergreifende Probleme oder // Auskommentare zu vermeiden.

str = 'this/that and/if';

var newstr = str.replace(/[/]/g, 'ForwardSlash');

1

Hallo, eine kleine Korrektur im obigen Skript. Über dem Skript wird das erste Zeichen übersprungen, wenn die Ausgabe angezeigt wird.

function stripSlashes(x)
{
var y = "";
for(i = 0; i < x.length; i++)
{
    if(x.charAt(i) == "/")
    {
        y += "";
    }
    else
    {
        y+= x.charAt(i);
    }
}
return y;   
}

0
var str = '/questions'; // input: "/questions"
while(str.indexOf('/') != -1){
   str = str.replace('/', 'http://stackoverflow.com/');
}
alert(str); // output: "http://stackoverflow.com/questions"

Die vorgeschlagene Regex /\//ghat bei mir nicht funktioniert; Der Rest der Zeile ( //g, replacement);) wurde auskommentiert.


1
Bitte beachten Sie, dass ich nicht sicher bin, wie die Leistung der vorgeschlagenen Array-Split / Join-Lösung verglichen wird.
Christopher Lincoln

... stolperte darüber ... probieren Sie eine andere IDE mit intelligenterer Syntaxhervorhebung aus. Verlassen Sie sich nicht auf die Farben Ihres Code-Editors, sondern glauben Sie an die Leistungsfähigkeit von Stateful-Parsern, die Ihren Code zur Laufzeit ordnungsgemäß tokenisieren.
Soletan

0

Dies ist Christopher Lincolns Idee, aber mit korrektem Code:

function replace(str,find,replace){
    if (find != ""){
        str = str.toString();
        var aStr = str.split(find);
        for(var i = 0; i < aStr.length; i++) {
            if (i > 0){
                str = str + replace + aStr[i];
            }else{
                str = aStr[i];
            }
        }
    }
    return str;
}

Anwendungsbeispiel:

var somevariable = replace('//\\\/\/sdfas/\/\/\\\////','\/sdf','replacethis\');

Das Ersetzen globaler Javascript-Zeichenfolgen ist unnötig kompliziert. Diese Funktion löst dieses Problem. Es gibt wahrscheinlich eine kleine Auswirkung auf die Leistung, aber ich bin sicher, dass sie vernachlässigbar ist.

Hier ist eine alternative Funktion, sieht viel sauberer aus, ist aber im Durchschnitt etwa 25 bis 20 Prozent langsamer als die oben genannte Funktion:

function replace(str,find,replace){
    if (find !== ""){
        str = str.toString().split(find).join(replace);
    }
    return str;
}

-1

Sie können ein RegExpObjekt erstellen , um es besser lesbar zu machen

str.replace(new RegExp('/'), 'foobar');

Wenn Sie alle ersetzen möchten, fügen Sie das "g"Flag hinzu

str.replace(new RegExp('/', 'g'), 'foobar');
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.