Reemplazar múltiples espacios en blanco con un espacio en blanco en una cadena de JavaScript


191

Tengo cadenas con espacios en blanco adicionales, cada vez que hay más de un espacio en blanco me gustaría que fuera solo uno.

¿Nadie? Intenté buscar en google, pero nada funcionó para mí.

Gracias


2
eliminar espacios en blanco duplicados desde el final / principio, o en cualquier parte del texto?
ninjagecko

Respuestas:


371

Algo como esto:

var s = "  a  b     c  ";

console.log(
  s.replace(/\s+/g, ' ')
)


31
@Me Lea la pregunta detenidamente: "cada vez que hay más de un espacio en blanco me gustaría que fuera solo uno".
bjornd

55
¿No es obvio? reemplaza más de 1 carácter de espacio en blanco con 1 carácter de espacio en blanco. (el resultado deseado)
Guerra

44
@CiaranG Es una expresión regular
pomeroy

1
@Wardy, cierre :-). Reemplaza uno O más con un espacio (pero de hecho, el resultado deseado).
greenoldman

1
¿Qué pasa si uno quiere reemplazar 1+ espacios en blanco con el mismo tipo de espacio en blanco? (p. ej., 2+ espacios con un espacio y 3 líneas nuevas con una línea nueva, etc.) si hay líneas nuevas y espacios, debería ser reemplazado por una línea nueva, mientras que si hay espacios y pestañas, debería ser reemplazado por un espacio
Tom

61

Puede aumentar String para implementar estos comportamientos como métodos, como en:

String.prototype.killWhiteSpace = function() {
    return this.replace(/\s/g, '');
};

String.prototype.reduceWhiteSpace = function() {
    return this.replace(/\s+/g, ' ');
};

Esto ahora le permite utilizar las siguientes formas elegantes para producir las cadenas que desee:

"Get rid of my whitespaces.".killWhiteSpace();
"Get rid of my extra        whitespaces".reduceWhiteSpace();

14
El aumento del prototipo del objeto estándar es un patrón realmente controvertido. No lo recomendaría para una pregunta tan básica.
Miércoles

@XavierJohn Es String, con una R, no Sting.
LasagnaAndroid

20

El uso de una expresión regular con la función de reemplazo hace el truco:

string.replace(/\s/g, "")

Esta solución es incorrecta según la pregunta. Y realmente me pregunto por qué lo publicaste dos días después de que se haya publicado una solución mejor ...
Sebastian Mach

Creo que en ese momento, solo este código funcionó para mí. No puedo volver sobre eso para confirmar. Obviamente, habría intentado la mejor solución primero. Además, al comprobarlo en la consola de Chrome, ambas soluciones parecían funcionar. Curiosamente, sin embargo, cuando copié el resultado en este cuadro de comentarios, mostró que mi solución no funcionaba para múltiples espacios en blanco. Quizás puedas ayudarme a entender por qué. ¿Supongo que es un error de Chrome? Intenta ejecutar mi código en la consola de Chrome y avísame.
Roger Gajraj

13

Aquí hay una solución no regex (solo por diversión):

var s = ' a   b   word word. word, wordword word   ';

// with ES5:
s = s.split(' ').filter(function(n){ return n != '' }).join(' ');
console.log(s); // "a b word word. word, wordword word"

// or ES6:
s = s.split(' ').filter(n => n).join(' '); 
console.log(s); // "a b word word. word, wordword word"

Divide la cadena en espacios en blanco , elimina todos los elementos de la matriz vacíos de la matriz (los que tenían más de un solo espacio) y une todas las palabras nuevamente en una cadena, con un solo espacio en blanco entre ellas.


12

Supongo que está buscando eliminar espacios desde el principio y / o el final de la cadena (en lugar de eliminar todos los espacios?

Si ese es el caso, necesitará una expresión regular como esta:

mystring = mystring.replace(/(^\s+|\s+$)/g,' ');

Esto eliminará todos los espacios desde el principio o el final de la cadena. Si solo desea recortar espacios desde el final, la expresión regular se vería así:

mystring = mystring.replace(/\s+$/g,' ');

Espero que ayude.


44
Me gusta la simplicidad de su expresión regular, @Spudley, pero ¿su código no reemplazará las ejecuciones de espacios en blanco al principio y al final con un solo carácter de espacio? Pensé que el objetivo era eliminar el espacio en blanco de los extremos por completo, en cuyo caso la cadena de reemplazo debería ser en ''lugar de ' '.
Randall Cook


6

Sé que no debería tener nigromancia en un tema, pero dados los detalles de la pregunta, generalmente lo amplío para que signifique:

  • Quiero reemplazar múltiples ocurrencias de espacios en blanco dentro de la cadena con un solo espacio
  • ... y ... no quiero espacios en blanco al principio o al final de la cadena (recorte)

Para esto, uso un código como este (el paréntesis en la primera expresión regular está ahí solo para hacer que el código sea un poco más legible ... las expresiones regulares pueden ser un dolor a menos que esté familiarizado con ellas):

s = s.replace(/^(\s*)|(\s*)$/g, '').replace(/\s+/g, ' ');

La razón por la que esto funciona es que los métodos en String-object devuelven un objeto de cadena en el que puede invocar otro método (al igual que jQuery y algunas otras bibliotecas). Una forma mucho más compacta de codificar si desea ejecutar varios métodos en un solo objeto en sucesión.


+1 para el ejemplo de "listo para usar". Iba a publicarlo yo mismo
d.raev

EXACTAMENTE lo que estaba buscando, ¡increíble!
robertp

4

var x = "Prueba Prueba Prueba" .split ("") .join (""); alerta (x);


55
Funciona pero no es una codificación inteligente. Este código es más lento que un RegEx. ¡Me pregunto si Split () no usa RegEx para dividir una cadena!
Farandole

2

Prueba esto.

var string = "         string             1";
string = string.trim().replace(/\s+/g, ' ');

el resultado será

string 1

Lo que sucedió aquí es que primero recortará los espacios exteriores usando y trim()luego recortará los espacios interiores usando .replace(/\s+/g, ' ').


0

Si desea restringir al usuario para que dé espacio en blanco en el nombre, simplemente cree una instrucción if y proporcione la condición. como yo lo hice:

$j('#fragment_key').bind({
    keypress: function(e){
        var key = e.keyCode;
    var character = String.fromCharCode(key); 
    if(character.match( /[' ']/)) {
        alert("Blank space is not allowed in the Name");
        return false;
        }
    }
});
  • crear una función JQuery.
  • Este es un evento de prensa clave.
  • Inicializar una variable.
  • Dar condición para que coincida con el personaje
  • muestra un mensaje de alerta para su condición coincidente.

0

¿Que tal este?

"my test string \t\t with crazy stuff is cool ".replace(/\s{2,9999}|\t/g, ' ')

salidas "my test string with crazy stuff is cool "

Este también elimina las pestañas


Las pestañas ya están cubiertas por \s. Regex innecesariamente complejo, bien podría escribir /\s+/g.
Anders Rabo Thorbeck
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.