¿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?

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');

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

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!' 

4

¿Es esto lo que quieres?

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

4

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

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

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');

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

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.


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

-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');
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.