¿Reemplazar espacios con guiones bajos en JavaScript?

353

Estoy tratando de usar este código para reemplazar espacios con _, funciona para el primer espacio en la cadena pero todas las demás instancias de espacios permanecen sin cambios. Alguien sabe por qué?

function updateKey()
{
    var key=$("#title").val();
    key=key.replace(" ","_");
    $("#url_key").val(key);
}
Haga clic en Upvote
fuente

Respuestas:

694

Tratar .replace(/ /g,"_");

Editar : o .split(' ').join('_')si tienes aversión a los RE

Editar : John Resig dijo :

Si está buscando y reemplazando a través de una cadena con una búsqueda estática y un reemplazo estático, es más rápido realizar la acción con .split ("match"). Join ("replace"), lo que parece contrario a la intuición pero logra funcionar de esa manera en la mayoría de los navegadores modernos. (Se están realizando cambios para mejorar enormemente el rendimiento de .replace (/ match / g, "replace") en la próxima versión de Firefox, por lo que la declaración anterior no será el caso por mucho tiempo).

Creciente Fresco
fuente
1
¿Hay alguna manera de hacer esto sin la expresión regular?
Haga clic en Upvote el
14
.split ('') .join ('_')
Crescent Fresh el
77
En lugar de / /gusar /\ /g, ambos funcionan en Javascript. Este último también funciona en CoffeeScript.
Tom Leys
27
A partir de 2015 es .replace(/ /g,"_");más rápido que .split(' ').join('_').
Gabriel Tomitsuka
8
Las futuras personas que naveguen por este @Inez tienen un enlace para probar ambas velocidades de división / unión VS. reemplazar. A finales de 2018, reemplazar es significativamente más rápido.
ricks
58

Para responder la pregunta de Prasanna a continuación:

¿Cómo se reemplazan múltiples espacios por un solo espacio en Javascript?

Usaría la misma función replacecon una expresión regular diferente. La expresión para espacios en blanco es \sy la expresión para "1 o más veces" es +el signo más, por lo que simplemente reemplazaría la respuesta de Adam con lo siguiente:

key=key.replace(/\s+/g,"_");
Rico
fuente
30

Puedes probar esto

 var str = 'hello     world  !!';
 str = str.replace(/\s+/g, '-');

Incluso reemplazará múltiples espacios con un solo '-'.

Fizer Khan
fuente
3
Probablemente digno de mención: esto también elimina las pestañas de otros espacios en blanco.
Berry M.
18

Creé la prueba de rendimiento JS para ello http://jsperf.com/split-and-join-vs-replace2

Inez
fuente
1
Parece que hoy en día es reemplazar la elección mejor en general
Houman
Kave, ¿qué? Aunque no todos los navegadores son iguales, dividir / unir en promedio es mucho mejor. De hecho, en muchos navegadores modernos, ¡es un tono mejor! ¡Gracias Inez por configurar esto!
David Hobs
44
Un poco más de un año más tarde y ejecutando la prueba anterior en Chrome 32.0.1700.107 .. str.replace () produce resultados mucho mejores (64% más rápido)
jenovachild
12

Reemplazar espacios con guión bajo

var str = 'How are you';
var replaced = str.split(' ').join('_');

Salida: How_are_you

Arshid KV
fuente
3

Sé que esto es viejo, pero no vi a nadie mencionar la extensión de la cadena prototype.

String.prototype.replaceAll = function(search, replace){
    if(!search || !replace){return this;} //if search entry or replace entry empty return the string
    return this.replace(new RegExp('[' + search + ']', 'g'), replace); //global RegEx search for all instances ("g") of your search entry and replace them all.
};
Dragón blanco de ojos azules
fuente
1
No viste a nadie hacerlo, ya que es una idea terrible. Mira esta otra pregunta SO para más.
2

Solo usando replace:

var text = 'Hello World';
    
new_text = text.replace(' ', '_');
    
console.log(new_text);

Vibhu Kumar
fuente
3
Esto solo reemplazará el primer espacio no después de eso
Narendra el