Substitua espaços por hífens e faça todas as letras em minúsculas


247

Preciso reformatar uma string usando jQuery ou JavaScript vanilla

Digamos que sim "Sonic Free Games".

Eu quero convertê-lo para "sonic-free-games".

Portanto, os espaços em branco devem ser substituídos por traços e todas as letras convertidas em letras minúsculas.

Alguma ajuda sobre isso, por favor?

Respostas:


549

Basta usar a String replacee os toLowerCasemétodos, por exemplo:

var str = "Sonic Free Games";
str = str.replace(/\s+/g, '-').toLowerCase();
console.log(str); // "sonic-free-games"

Observe o gsinalizador no RegExp, ele fará a substituição globalmente na cadeia; se não for usado, apenas a primeira ocorrência será substituída e também RegExpcorresponderá a um ou mais caracteres de espaço em branco.


52
Uma variação que eu criei usa \ W que representa qualquer caractere não alfanumérico. Isso é útil para algo como 'A&P Grocery', que se tornaria 'ap-grocery'. str.replace(/\W+/g, '-').toLowerCase();
precisa saber é o seguinte

1
Mente não citar a expressão regular, ou seja, replace(/\s+/g, ..e não replace('/\s+/f', .. (sem apóstrofo)
Attila Fulop

E se eu quiser remover os espaços no início e no final da string?
Romel Indemne 28/02

@RomelIndemne Atualmente você pode usar o String.prototype.trimmétodo:str.trim().replace(/\s+/g, '-').toLowerCase()
CMS

Obrigado, legal. Agora eu preciso do contrário xD JK
lawphotog

34

A resposta acima pode ser considerada um pouco confusa. Os métodos de sequência não estão modificando o objeto original. Eles retornam novo objeto. Deve ser:

var str = "Sonic Free Games";
str = str.replace(/\s+/g, '-').toLowerCase(); //new object assigned to var str

10
Eu acho que é importante notar que a resposta aceita foi editado para incorporar esse conceito
Dexygen

31

Você também pode usar splite join:

"Sonic Free Games".split(" ").join("-").toLowerCase(); //sonic-free-games

Ser consciente de colaterais casos, por exemplo, quando algum espaço estão no início, eles não serão substituídos
Bonjour123

1

A resposta do @ CMS está ótima, mas quero observar que você pode usar este pacote: https://github.com/sindresorhus/slugify , que faz isso por você e cobre muitos casos extremos (por exemplo, trema alemão, vietnamita, árabe) , Russo, romeno, turco etc.).


0

var str = "Tatwerat Development Team";
str = str.replace(/\s+/g, '-');
console.log(str);
console.log(str.toLowerCase())

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.