Come sostituire globalmente una barra in avanti in una stringa JavaScript?


130

Come sostituire globalmente una barra in avanti in una stringa JavaScript?

Risposte:


256

Farebbe quanto segue ma sostituirà solo un'occorrenza:

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

Per una sostituzione globale, o se preferisci le espressioni regolari, devi solo sfuggire alla barra:

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

3
Il primo frammento non esegue la sostituzione globale. Non sono sicuro di come eseguire la sostituzione globale nel modo non regex.
BoltClock

Ah giusto, non l'ho provato con più di una barra. Potrebbe essere fatto con, "string".replace('/', 'ForwardSlash', 'g')ma questo è un argomento non standard che funziona solo con Firefox afaik.
Seldaek,

1
"string".replace(/\//g, 'ForwardSlash');funziona ma rimuove / g da questo e non funziona.
johntrepreneur

1
@johntrepreneur the g indica che è un sostituto globale, ovvero sostituisce tutte le istanze del corrispondente /. Senza g sostituisce solo un'istanza. E se rimuovi /g, rompi completamente il regex poiché l'ultimo / è il delimitatore di fine.
Seldaek,

1
@RameshRajendran è esattamente come è l'API .. per impostazione predefinita, sostituisce solo una volta, quindi si interrompe quando ne trova una da sostituire. Vedi anche developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Seldaek,

27

Usa un regex letterale con il gmodificatore e scappa dalla barra rovesciata con una barra rovesciata in modo che non si scontri con i delimitatori.

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

7

Senza usare regex (anche se lo farei solo se la stringa di ricerca è l'input dell'utente):

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

4

È questo che vuoi?

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

4

Questo ha funzionato per me trasformandomi "//"in giusto "/".

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

2

Devi avvolgere la barra per evitare problemi tra browser o // commentare.

str = 'this/that and/if';

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

1

Salve una piccola correzione nello script sopra ... sopra lo script saltando il primo carattere quando si visualizza l'output.

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"

Il regex proposto /\//gnon ha funzionato per me; il resto della riga ( //g, replacement);) è stato commentato.


1
Si noti che non sono sicuro di come le prestazioni di questo possano confrontare la soluzione di divisione / unione dell'array proposta.
Christopher Lincoln

... ci siamo imbattuti in questo ... prova diversi IDE usando l'evidenziazione della sintassi più intelligente. Non fare affidamento sui colori del tuo editor di codice, ma credi nella potenza dei parser con stato che tokenizzano correttamente il tuo codice in fase di esecuzione.
soletan,

0

Questa è l'idea di Christopher Lincolns ma con il codice corretto:

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;
}

Esempio di utilizzo:

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

La sostituzione di stringhe globali Javascript è inutilmente complicata. Questa funzione risolve quel problema. Probabilmente c'è un piccolo impatto sulle prestazioni, ma sono sicuro che sia trascurabile.

Ecco una funzione alternativa , sembra molto più pulita, ma è mediamente più lenta di circa il 25-20% rispetto alla funzione sopra:

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

-1

Puoi creare un RegExpoggetto per renderlo un po 'più leggibile

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

Se vuoi sostituirli tutti aggiungi il "g"flag

str.replace(new RegExp('/', 'g'), 'foobar');
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.