2011-10-03 19 views
21

¿Cómo puedo eliminar todo el espacio extra entre las palabras en una cadena literal?Javascript - Cómo eliminar todo el espaciado adicional entre las palabras

"some value" 

debe convertirse en

"some value" 

Además,

" This should become something   else too . " 

Se convierte en

"This should become something else too ." 

No se preocupe acerca de cómo mover el .. Así como arriba está bien. Sé que puedo usar $.trim(str) para lograr la eliminación del espacio final/final. Pero, no estoy seguro de cómo hacer el truco de 1 espacio entre palabras.

+0

regex al rescate ....! – Kasturi

+0

has intentado google "eliminar todo el espacio adicional entre palabras javascript"? El tercer enlace es lo que buscas http://lawrence.ecorp.net/inet/samples/regexp-format.php –

+0

@Massimiliano Peluso - Sí, así es como encontré '$ .trim()'. Además, aprendo mucho más de SO que de un motor de búsqueda. –

Respuesta

41
var string = " This should become something   else too . "; 
string = string.replace(/\s+/g, " "); 

Este código sustituye a un conjunto consecutivo de espacios en blanco (\s+) por un solo espacio en blanco. Tenga en cuenta que un carácter de espacio en blanco también incluye tabulaciones y nuevas líneas. Reemplace \s por un espacio si solo quiere reemplazar espacios.

Si también desea eliminar el espacio en blanco al principio y al final, son:

string = string.replace(/^\s+|\s+$/g, ""); 

Esta línea elimina todos los espacios en blanco al principio (^) y al final ($). El g al final de RegExp significa: global, es decir, coincide y reemplaza todas las ocurrencias.

+0

Esta solución es genial porque limpia algunos personajes sucios que ni siquiera pensé. –

+0

var newString = string.replace (/^\ s + | \ s + $/g, "") .replace (/ \ s +/g, ""); – RTF

11
var str = " This should become something   else too . "; 
str = str.replace(/ +(?=)/g,''); 

Aquí está a working fiddle.

+3

¡Una pequeña explicación sobre la expresión regular utilizada sería agradable! –

+0

¿Por qué una regla tan complicada exp cuando todo lo que se necesita es '\ s +'? Y [por qué lookaheads no son buenos] (http://stackoverflow.com/questions/1843459/javascript-the-good-parts-why-is-lookahead-not-good). – epascarello

+1

significa que está reemplazando uno o más caracteres espaciales '/ +' - que preceden a un caracter de espacio '(? =)' En toda la cadena '/ g' con nada', '' '. Puede leer más al respecto [aquí] (http://www.w3schools.com/jsref/jsref_regexp_nfollow.asp) – mogoman

0

Otro (quizás más fácil de entender) la sustitución de expresiones regulares que va a hacer el truco:

var input = /* whatever */; 
input = input.replace(/ +/g, ' '); 

La expresión regular coincide con uno o más espacios, por lo que la llamada .replace() reemplaza cada espacio único o repetido con un solo espacio.

0
var str = 'some value'; 
str.replace(/\s\s+/g, ' '); 
+0

¿por qué el '' s' extra? No hay necesidad de eso. – epascarello

4
var str = " This should become something   else too . " 
$.trim(str).replace(/\s(?=\s)/g,'') 

Esto utiliza la búsqueda anticipada para reemplazar espacios múltiples con un solo espacio.

Cuestiones relacionadas