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.