Reemplace los espacios con guiones y haga todas las letras minúsculas

247

Necesito reformatear una cadena usando jQuery o JavaScript vainilla

Digamos que tenemos "Sonic Free Games".

Quiero convertirlo a "sonic-free-games".

Por lo tanto, los espacios en blanco deben ser reemplazados por guiones y todas las letras convertidas en letras pequeñas.

¿Alguna ayuda en esto por favor?

YO
fuente

Respuestas:

549

Simplemente use la cadena replacey los toLowerCasemétodos, por ejemplo:

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

Observe la gbandera en el RegExp, realizará el reemplazo globalmente dentro de la cadena, si no se usa, solo se reemplazará la primera aparición, y también, que RegExpcoincidirá con uno o más caracteres de espacio en blanco.

CMS
fuente
52
Una variación que se me ocurrió utiliza \ W que representa cualquier carácter no alfanumérico. Esto es útil para algo como 'A&P Grocery' que se convertiría en 'ap-grocery'. str.replace(/\W+/g, '-').toLowerCase();
Adam Waselnuk
1
La mente no cita la parte de expresiones regulares, es decir replace(/\s+/g, ..y no replace('/\s+/f', .. (sin apóstrofes)
Attila Fulop
¿Qué sucede si quiero eliminar los espacios al principio y al final de la cadena?
Romel Indemne
@RomelIndemne Hoy en día puedes usar el String.prototype.trimmétodo:str.trim().replace(/\s+/g, '-').toLowerCase()
CMS
Gracias agradable. Ahora necesito lo contrario xD JK
lawphotog
34

La respuesta anterior puede considerarse un poco confusa. Los métodos de cadena no están modificando el objeto original. Ellos regresan nuevo objeto. Debe ser:

var str = "Sonic Free Games";
str = str.replace(/\s+/g, '-').toLowerCase(); //new object assigned to var str
yurin
fuente
10
Creo que es importante tener en cuenta que la respuesta aceptada fue editada para incorporar este concepto
Dexygen
31

También puedes usar splity join:

"Sonic Free Games".split(" ").join("-").toLowerCase(); //sonic-free-games
Eesa
fuente
Tenga en cuenta los casos secundarios, por ejemplo, cuando hay espacio al principio, no se reemplazarán
Bonjour123
1

La respuesta de @ CMS está bien, pero quiero señalar que puede usar este paquete: https://github.com/sindresorhus/slugify , que lo hace por usted y cubre muchos casos extremos (es decir, diéresis alemanas, vietnamita, árabe , Ruso, rumano, turco, etc.).

Matias
fuente
0

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

Abdo-Host
fuente