2011-08-22 27 views
55

Piszę malutką wtyczkę do JQuery, aby usunąć spacje z łańcucha. see hereJavaScript Wyrażenie regularne Usuń spacje

(function($) { 
    $.stripSpaces = function(str) { 
     var reg = new RegExp("[ ]+","g"); 
     return str.replace(reg,""); 
    } 
})(jQuery); 

moje wyrażenie regularne jest obecnie [ ]+ zebrać wszystkie przestrzenie. To działa .. jednak nie zostawić dobrego smaku w ustach .. Próbowałem też [\s]+ i [\W]+ ale nie działało ..

Musi być lepszy (bardziej zwięzły) sposobem poszukiwania tylko spacje.

Odpowiedz

141

Polecam korzystanie z dosłownego zapisu i przy użyciu klasy \s znaków:

//.. 
return str.replace(/\s/g, ''); 
//.. 

Istnieje różnica między pomocą klasę postaci \s' ' i właśnie ta dopasuje dużo więcej znaków białych znaków, na przykład '\t\r\n' itd., poszukiwanie ' ' zastąpi tylko pustą przestrzeń ASCII 32.

Konstruktor RegExp jest przydatny, gdy chcesz zbudować dynamiczny wzór, w tym przypadku nie potrzebujesz go. Co więcej, jak powiedziałeś, nie zadziałało z konstruktorem RegExp, to dlatego, że przekazujesz ciąg znaków, i powinieneś "podwójnie uciec" od ukośników, w przeciwnym razie będą interpretowane jako znaki ucieczki wewnątrz ciąg (np .: "\s" === "s" (nieznana ucieczka)).

1
str.replace(/\s/g,'') 

pracuje dla mnie.

jQuery.trim ma następujący trik dla IE, chociaż nie jestem pewien, co wpływa wersje:

// Check if a string has a non-whitespace character in it 
rnotwhite = /\S/ 

// IE doesn't match non-breaking spaces with \s 
if (rnotwhite.test("\xA0")) { 
    trimLeft = /^[\s\xA0]+/; 
    trimRight = /[\s\xA0]+$/; 
} 
11
"foo is bar".replace(/ /g, '')