2011-11-03 13 views
7

Quiero combinar todas las expresiones en una y no tengo ni idea de cómo hacerlo, necesita eliminar el espacio en blanco final y eliminar el espacio en blanco inicial, pero acortar el espacio en blanco entre dos palabras en una sola (si hay más de uno) Gracias¿Cómo combinar expresiones str.replace() en javascript?

var _str = document.contact_form.contact_name.value; 
name_str = _str.replace(/\s+/g,' '); 
str_name = name_str.replace(/\s+$/g,''); 
name = str_name.replace(/^\s+/g,''); 
document.contact_form.contact_name.value = name; 

Respuesta

13

Se pueden combinar los dos segundos en una sola expresión regular:

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

También puede mirar en el método de jQuery trim.

Descripción: Elimine los espacios en blanco del principio y el final de una cadena.

1
document.contact_form.contact_name.value = _str.replace(/\s+/g,' ')..replace(/\s+$/g,'').replace(/^\s+/g,''); 
3

Así es como yo lo haría:

String.prototype.trimAndCompact = function() { 
    return this 
     // This removes whitespace at the beginning and end of the string 
     .replace(/(^\s+)|(\s+$)/g, '') 
     // This replaces any leftover whitespace (one or more instances) 
     // with a single space 
     .replace(/\s+/g, ' '); 
}; 

Una buena referencia sobre la sintaxis de expresiones regulares de JavaScript se puede encontrar here.

estoy tomando ventaja del hecho de que el método de sustituir devuelve una nueva cadena, por lo que puede encadenar dos llamadas en una fila.

Además, asignaré la función al objeto Stringprototype. Esencialmente, hacer que la función esté disponible para todos los objetos String, como un método.

De esta manera, se le puede llamar directamente en la cadena que desea compactar: ​​

var name = document.contact_form.contact_name; 
name.value = name.value.trimAndCompact(); 

hace que el código un poco más elegante, en mi opinión.

1
var name = _str.replace(/\s+$|^\s+/g,'').replace(/\s+/g,' '); 

Usted puede utilizar el carácter | en su expresión regular para que coincida con la sub-expresión a cada lado de ella, y se pueden encadenar varias llamadas a .replace().

Por cierto, no se olvide de declarar todas las variables con var.

0

Me parece que es el momento de definir function compactify(str). Incluso si pudieras incluir todo eso en un solo RegEx, el resultado sería difícil de leer y peor de mantener.

Cuestiones relacionadas