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?

Babiker
quelle

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');
Seldaek
quelle
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);
BoltClock
quelle
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!' 
PleaseStand
quelle
4

Ist das was du willst?

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

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

str.replace(/\/\//g, '/');
Marty
quelle
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');
Baz
quelle
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;   
}
Vinay
quelle
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.

Christopher Lincoln
quelle
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;
}
Jeff Luyet
quelle
-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');
rioV8
quelle