Como substituir globalmente uma barra em uma string JavaScript?


130

Como substituir globalmente uma barra em uma string JavaScript?

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

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

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

4

É isso que voce quer?

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

4

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

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

2

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

str = 'this/that and/if';

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

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

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.


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

-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');
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.