¿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);
}

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


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,"_");

30

Puedes probar esto

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

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


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


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


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.
};

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


3
Esto solo reemplazará el primer espacio no después de eso
Narendra el
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.