¿Cómo reemplazar globalmente una barra diagonal en una cadena de JavaScript?

130

¿Cómo reemplazar globalmente una barra diagonal en una cadena de JavaScript?

Babiker
fuente

Respuestas:

256

Lo siguiente funcionaría, pero solo reemplazará una ocurrencia:

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

Para un reemplazo global, o si prefiere expresiones regulares, solo tiene que escapar de la barra:

"string".replace(/\//g, 'ForwardSlash');
Seldaek
fuente
3
El primer fragmento no hace un reemplazo global. No estoy muy seguro de cómo hacer un reemplazo global de la manera no regex.
BoltClock
Ah cierto, no lo intenté con más que un corte. Se podría hacer, "string".replace('/', 'ForwardSlash', 'g')pero ese es un argumento no estándar que solo funciona en Firefox afaik.
Seldaek
1
"string".replace(/\//g, 'ForwardSlash');funciona pero elimina el / g de esto y no funciona.
johntrepreneur
1
@johntrepreneur la g indica que es un reemplazo global, es decir, reemplaza todas las instancias de la coincidencia /. Sin la g solo reemplaza una instancia. Y si elimina /g, rompe la expresión regular por completo ya que el último / es el delimitador final.
Seldaek
1
@RameshRajendran así es como es la API ... por defecto, solo reemplaza una vez y luego se detiene cuando encuentra una para reemplazar. Ver también developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Seldaek
27

Use un literal regex con el gmodificador y escape de la barra diagonal con una barra diagonal inversa para que no choque con los delimitadores.

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

Sin usar regex (aunque solo haría esto si la cadena de búsqueda es entrada del usuario):

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

¿Es esto lo que quieres?

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

Esto me ha funcionado para convertirme "//"en justo "/".

str.replace(/\/\//g, '/');
Marty
fuente
2

Debe ajustar la barra diagonal para evitar problemas en el navegador o // comentar.

str = 'this/that and/if';

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

Hola, una pequeña corrección en la secuencia de comandos anterior ... la secuencia de comandos anterior omite el primer carácter al mostrar la salida.

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
fuente
0
var str = '/questions'; // input: "/questions"
while(str.indexOf('/') != -1){
   str = str.replace('/', 'http://stackoverflow.com/');
}
alert(str); // output: "http://stackoverflow.com/questions"

La expresión regular propuesta /\//gno funcionó para mí; el resto de la línea ( //g, replacement);) fue comentado.

Christopher Lincoln
fuente
1
Tenga en cuenta que no estoy seguro de cómo el rendimiento de esto compara la solución de división / unión de matriz propuesta.
Christopher Lincoln
... tropecé con esto ... pruebe diferentes IDE usando resaltado de sintaxis más inteligente. No confíe en los colores de su editor de código, pero crea en el poder de los analizadores con estado que tokenizan adecuadamente su código en tiempo de ejecución.
soletan
0

Esta es la idea de Christopher Lincolns pero con el código correcto:

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

Ejemplo de uso:

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

El reemplazo global de cadenas de Javascript es excesivamente complicado. Esta función resuelve ese problema. Probablemente haya un pequeño impacto en el rendimiento, pero estoy seguro de que es insignificante.

Heres una función alternativa , se ve mucho más limpia, pero en promedio es de 25 a 20 por ciento más lenta que la función anterior:

function replace(str,find,replace){
    if (find !== ""){
        str = str.toString().split(find).join(replace);
    }
    return str;
}
Jeff Luyet
fuente
-1

Puedes crear un RegExpobjeto para hacerlo un poco más legible

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

Si desea reemplazarlos todos, agregue la "g"bandera

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