2011-11-03 11 views
7

Chcę połączyć wszystkie wyrażenia w jedną i nie mam pojęcia, jak to zrobić, trzeba usunąć koniec białej przestrzeni i usunąć początkową białą przestrzeń, ale skrócić białą przestrzeń między dwoma słowami tylko do jednego (jeśli jest więcej niż jeden). DziękiJak łączyć wyrażenia str.replace() w 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; 

Odpowiedz

13

Można łączyć kolejne dwa do jednego wyrażenia regularnego:

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

Można również spojrzeć na trim metody jQuery.

Opis: Usuń białe znaki od początku i końca ciągu.

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

Oto jak ja to zrobię:

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

dobre referencje na JavaScript składni wyrażeń regularnych można znaleźć here.

Korzystam z faktu, że metoda replace zwraca nowy ciąg, więc mogę połączyć dwa połączenia z rzędu.

Ponadto przypiszę funkcję do obiektu obiektu prototype. Zasadniczo udostępnienie funkcji wszystkim obiektom String jako metody.

W ten sposób, można nazwać to bezpośrednio na strunie chcesz kompaktowa:

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

Sprawia kod trochę bardziej elegancki, moim zdaniem.

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

Można użyć znaku | w wyrażeniu regularnym, aby dopasować sub-wyraz po obu jej stronach, a można łańcuchowe wielu połączeń do .replace().

Przy okazji, nie zapomnij zadeklarować wszystkich zmiennych za pomocą var.

0

Wygląda na to, że nadszedł czas, aby zdefiniować function compactify(str). Nawet gdybyś mógł włożyć to wszystko do jednego RegEx, wynik byłby trudny do odczytania, a gorzej do utrzymania.

Powiązane problemy