Usuń WSZYSTKIE białe spacje z tekstu

587
$("#topNav" + $("#breadCrumb2nd").text().replace(" ", "")).addClass("current");

To jest fragment mojego kodu. Chcę dodać klasę do identyfikatora po uzyskaniu właściwości tekstowej innego identyfikatora. Problem polega na tym, że identyfikator zawierający tekst, którego potrzebuję, zawiera przerwy między literami.

Chciałbym usunąć białe przestrzenie. Próbowałem TRIM()i REPLACE()ale to tylko częściowo działa. REPLACE()Usuwa tylko 1st miejsca.

Cecil Theodore
źródło

Odpowiedzi:

1347

Musisz powiedzieć replace (), aby powtórzyć wyrażenie regularne:

.replace(/ /g,'')

Znak g oznacza powtórzenie wyszukiwania przez cały ciąg. Przeczytaj o tym i innych modyfikatorach RegEx dostępnych w JavaScript tutaj .

Jeśli chcesz dopasować wszystkie białe znaki, a nie tylko literalny znak spacji, użyj \szamiast tego:

.replace(/\s/g,'')
Flimzy
źródło
30
Coffeescript narzeka na to wyrażenie regularne z jakiegoś okropnego powodu. Zamiast tego musiałem iść naprzód i używać tego, .replace(/\s+/g, '')co jest całkowicie w porządku dla mnie.
Dan Bradbury
7
Jeśli chcesz zaimplementować coś podobnego sposobu string.strip Rubiego, który powraca Zwraca kopię napisu z początkowe i końcowe spacje usunięte, to powinno działać: x = " Many spaces before and after " y = x.replace(/(^\s+|\s+$)/g, "") The ^\sśrodki spacje po początku łańcucha, \s$środków spacje na końcu ciąg, |jest dla / lub w grupie, a gmodyfikator wyjaśniono w komentarzach powyżej. Potrzebujesz także +kwantyfikatorów po każdym, \sponieważ chcesz uchwycić jedno lub więcej wystąpień białych znaków.
Garrett Simpson
298
.replace(/\s+/, "") 

Zastąpi tylko pierwszą białą spację , w tym spacje, tabulatory i nowe linie.

Aby zamienić wszystkie białe znaki w ciągu, musisz użyć trybu globalnego

.replace(/\s/g, "")
Pantelis
źródło
11
Pierwszy nie usuwa wszystkich białych spacji (usuwa tylko pierwszą grupę spacji / nowej linii / tabulacji), drugi jest OK. demo: regex101.com/r/wX8rF2/3
4
.replace (/ \ s + / g, '')
mynameistechno
@mynameistechno Nic +nie dodaje, ponieważ już korzystamy z gmodyfikatora (globalnego)
d4nyll
pierwszy wiersz nie działał, ponieważ nie usuwa końcowych spacji z tekstu
UKDataGeek
@ d4nyll Może to zwiększyć wydajność.
Solomon Ucko
5

Korzystanie String.prototype.replacez wyrażenia regularnego, jak wspomniano w innych odpowiedziach, jest z pewnością najlepszym rozwiązaniem.

Ale dla zabawy możesz również usunąć wszystkie białe znaki z tekstu, używając String.prototype.spliti String.prototype.join:

const text = ' a b    c d e   f g   ';
const newText = text.split(/\s/).join('');

console.log(newText); // prints abcdefg

Alberto Trindade Tavares
źródło