Como substituir globalmente uma barra em uma string JavaScript?

130

Como substituir globalmente uma barra em uma string JavaScript?

Babiker
fonte

Respostas:

256

O seguinte faria, mas apenas substituirá uma ocorrência:

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

Para uma substituição global, ou se você preferir expressões regulares, basta escapar da barra:

"string".replace(/\//g, 'ForwardSlash');
Seldaek
fonte
3
O primeiro trecho não faz substituição global. Não tenho muita certeza de como fazer a substituição global da maneira não regular.
BoltClock
Ah, certo, eu não tentei com mais do que uma barra. Poderia ser feito com, "string".replace('/', 'ForwardSlash', 'g')mas esse é um argumento não padrão que funciona apenas no Firefox.
Seldaek
1
"string".replace(/\//g, 'ForwardSlash');funciona, mas remova o / g disso e não funciona.
johntrepreneur
1
@johntrepreneur eg indica que é uma substituição global, ou seja, substitui todas as instâncias da correspondência /. Sem o g, ele substitui apenas uma instância. E se você remover, /ginterrompa o regex completamente desde o último / é o delimitador final.
Seldaek
1
@RameshRajendran é assim que a API é .. por padrão, ela substitui apenas uma vez e para quando encontra uma para substituir. Veja também developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/…
Seldaek
27

Use um literal de regex com o gmodificador e escape da barra com uma barra invertida para que não entre em conflito com os delimitadores.

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

Sem usar o regex (embora eu faria isso apenas se a string de pesquisa fosse entrada do usuário):

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

É isso que voce quer?

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

Isso funcionou para mim, transformando-me "//"apenas "/".

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

Você precisa quebrar a barra para evitar problemas entre navegadores ou // comentando.

str = 'this/that and/if';

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

Oi uma pequena correção no script acima .. script acima pulando o primeiro caractere ao exibir a saída.

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

O regex proposto /\//gnão funcionou para mim; o restante da linha ( //g, replacement);) foi comentado.

Christopher Lincoln
fonte
1
Observe que não tenho certeza de como o desempenho disso compara a solução de divisão / junção de matriz proposta.
Christopher Lincoln
... tropeçou nisso ... tente um IDE diferente usando o realce de sintaxe mais inteligente. Não confie nas cores do seu editor de código, mas acredite no poder dos analisadores com estado, que tokenizam adequadamente seu código em tempo de execução.
soletan
0

Essa é a idéia de Christopher Lincolns, mas com o código correto:

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

Exemplo de uso:

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

A substituição global de cadeias Javascript é desnecessariamente complicada. Esta função resolve esse problema. Provavelmente, há um pequeno impacto no desempenho, mas tenho certeza que é insignificante.

Heres uma função alternativa , parece muito mais limpa, mas é em média cerca de 25 a 20% mais lenta que a função acima:

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

Você pode criar um RegExpobjeto para torná-lo um pouco mais legível

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

Se você deseja substituir todos eles, adicione a "g"bandeira

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