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?

MIM
fonte

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.

CMS
fonte
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
yurin
fonte
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
Eesa
fonte
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.).

Matias
fonte
0

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

Abdo-Host
fonte