Substituindo espaços por sublinhados em JavaScript?

353

Estou tentando usar esse código para substituir espaços por _, ele funciona para o primeiro espaço na cadeia de caracteres, mas todas as outras instâncias de espaços permanecem inalteradas. Alguém sabe por que?

function updateKey()
{
    var key=$("#title").val();
    key=key.replace(" ","_");
    $("#url_key").val(key);
}
Click Voto a favor
fonte

Respostas:

694

Tentar .replace(/ /g,"_");

Editar : ou .split(' ').join('_')se você tem uma aversão a REs

Edit : John Resig disse :

Se você estiver pesquisando e substituindo uma string por uma pesquisa estática e uma substituição estática, é mais rápido executar a ação com .split ("match"). Join ("replace") - o que parece contra-intuitivo, mas consegue funcionar dessa maneira na maioria dos navegadores modernos. (Existem alterações em andamento para melhorar significativamente o desempenho de .replace (/ match / g, "replace") na próxima versão do Firefox - portanto, a declaração anterior não será o caso por muito tempo.)

Crescent Fresh
fonte
11
Existe alguma maneira de fazer isso sem o regexp?
Click Voto a favor
14
.split ('') .join ('_')
Crescent Fresh
7
Em vez de / /gusar /\ /g- ambos funcionam em Javascript. O último também funciona no CoffeeScript.
precisa
27
A partir de 2015 é .replace(/ /g,"_");mais rápido que .split(' ').join('_').
Gabriel Tomitsuka
8
As pessoas que estão navegando neste @Inez têm um link para testar as duas velocidades de divisão / associação ao VS. substituir. A partir do final de 2018, a substituição é significativamente mais rápida.
Ricks
62

tente isto:

key=key.replace(/ /g,"_");

que fará uma localização / substituição global

substituir javascript

Adão
fonte
58

Para responder à pergunta de Prasanna abaixo:

Como você substitui vários espaços por um único espaço em Javascript?

Você usaria a mesma função replacecom uma expressão regular diferente. A expressão para espaço em branco é \se a expressão para "1 ou mais vezes" é +o sinal de mais, então você substitui a resposta de Adam pelo seguinte:

key=key.replace(/\s+/g,"_");
Rico
fonte
30

Você pode tentar isso

 var str = 'hello     world  !!';
 str = str.replace(/\s+/g, '-');

Ele até substituirá vários espaços por um único '-'.

Fizer Khan
fonte
3
Provavelmente digno de nota: isso também tira as guias de outros espaços em branco.
Berry M.
18

Eu criei o teste de desempenho JS para ele http://jsperf.com/split-and-join-vs-replace2

Inez
fonte
11
parece hoje em dia substituir é a escolha melhor no geral
Houman
Kave - o que? Embora nem todos os navegadores sejam iguais, a divisão / associação, em média, é muito melhor. De fato, em muitos navegadores modernos, é um tom melhor! Obrigado Inez por configurar isso!
21712 David Hobs
4
Um pouco mais de um ano depois, agora e em execução que teste acima no Chrome 32.0.1700.107 .. str.replace () produz resultados muito melhores (64% mais rápido)
jenovachild
12

Substituir espaços por sublinhado

var str = 'How are you';
var replaced = str.split(' ').join('_');

Saída: How_are_you

Arshid KV
fonte
3

Eu sei que isso é antigo, mas não vi ninguém mencionar a extensão da String prototype.

String.prototype.replaceAll = function(search, replace){
    if(!search || !replace){return this;} //if search entry or replace entry empty return the string
    return this.replace(new RegExp('[' + search + ']', 'g'), replace); //global RegEx search for all instances ("g") of your search entry and replace them all.
};
Dragão Branco de olhos azuis
fonte
11
Você não viu ninguém fazer isso, pois é uma péssima ideia. Confira esta outra questão SO para mais.
2

Apenas usando replace:

var text = 'Hello World';
    
new_text = text.replace(' ', '_');
    
console.log(new_text);

Vibhu kumar
fonte
3
Isso irá apenas substituir o primeiro espaço não depois disso
Narendra