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?

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.


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

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

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


0

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.