2011-11-03 14 views
7

Voglio combinare tutte le espressioni in una e non ho la minima idea di come farlo, è necessario rimuovere lo spazio bianco di fine e rimuovere lo spazio bianco iniziale ma accorciare lo spazio bianco tra due parole in una sola (se ce n'è più di uno). GrazieCome combinare le espressioni str.replace() in 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; 

risposta

13

È possibile combinare i secondi due in una sola espressione regolare:

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

Si potrebbe anche guardare il metodo di jQuery trim.

Descrizione: rimuovere gli spazi bianchi dall'inizio e dalla fine di una stringa.

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

Ecco come lo farei:

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, ' '); 
}; 

Un buon riferimento sulla sintassi delle espressioni regolari JavaScript può essere trovato here.

Sto approfittando del fatto che il metodo replace restituisce una nuova stringa, quindi posso concatenare due chiamate di fila.

Inoltre, sto assegnando la funzione allo String dell'oggetto prototype. Essenzialmente rendendo la funzione disponibile per tutti gli oggetti String, come metodo.

In questo modo, si può chiamare direttamente sulla stringa che si desidera compattare:

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

rende il codice un po 'più elegante, a mio parere.

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

È possibile utilizzare il carattere | nella vostra espressione regolare che corrisponda al sub-espressione su entrambi i lati di esso, e si può catena più chiamate a .replace().

A proposito, non dimenticare di dichiarare tutte le variabili con var.

0

Mi sembra che sia il momento di definire function compactify(str). Anche se si potesse stipare tutto ciò in una RegEx, il risultato sarebbe difficile da leggere e peggio da mantenere.

Problemi correlati