Biorąc pod uwagę ciąg znaków:
„Pies ma długi ogon i jest CZERWONY!”
Jakiego rodzaju magii jQuery lub JavaScript można użyć, aby spacje były ograniczone tylko do jednego spacji?
Cel:
„Pies ma długi ogon i jest CZERWONY!”
javascript
jquery
regex
Uczeń
źródło
źródło
str.replace(/ +(?= )/g,'');
nie zastępujesz niczego, czego nie musisz.Odpowiedzi:
Biorąc pod uwagę, że chcemy także kartami okładka, nowej linii, itp, po prostu zastąpić
\s\s+
z' '
:Jeśli naprawdę chcesz objąć tylko spacje (a więc nie tabulatory, znaki nowej linii itp.), Zrób to:
źródło
function removeExtraSpaces(string){ return string.replace(/\s{2,}/g, ' ');}
trim()
. Jest szybszy niż regex. Możesz po prostu zrobićstring.trim().replace(/\s\s+/g, ' ');
lubstring.replace(/\s\s+/g, ' ').trim();
./\s\s+/g
i/\s{2,}/g
nie dopasowuj białych znaków, chyba że są co najmniej dwa sąsiadujące ze sobą, np. dopasuje \ t \ t, ale nie będzie pasować do pojedynczego \ t.string.replace(/\s+/g, ' ')
dopasuje wszystkie pojedyncze i wielokrotne białe znaki podrzędne i zastąpi je pojedynczą spacją.Ponieważ wydajesz się być zainteresowany wydajnością, profilowałem je za pomocą firebuga. Oto wyniki, które otrzymałem:
To jest w Firefoksie, na którym działa 100 000 zamienników ciągu.
Zachęcam do wykonania własnych testów profilowania za pomocą firebuga, jeśli uważasz, że wydajność jest problemem. Ludzie notorycznie źle przewidują, gdzie leżą wąskie gardła w ich programach.
(Należy również pamiętać, że pasek narzędzi programisty IE 8 ma również wbudowany profiler - warto sprawdzić, jaka jest wydajność w IE.)
źródło
( / +(?= )/g, ' ');
kończy się niepowodzeniem w IE9, pozostawia podwójne spacje:"Foo Bar Baz".replace(/ +(?= )/g, ' ');
->"Foo Bar Baz"
EDYCJA: Jeśli chcesz zastąpić wszelkiego rodzaju białe znaki, najskuteczniejszym sposobem byłoby:
źródło
To jest jedno rozwiązanie, ale będzie kierowane na wszystkie znaki spacji:
Edycja : Prawdopodobnie jest to lepsze, ponieważ celuje w spację, po której następuje 1 lub więcej spacji:
Alternatywna metoda:
Sam z siebie nie korzystałem
/\s+/
, ponieważ zastępuje spacje, które obejmują 1 postać wiele razy i może być mniej wydajny, ponieważ celuje bardziej niż to konieczne.Nie przetestowałem dogłębnie żadnego z nich, więc myślę, że są jakieś błędy.
Ponadto, jeśli zamierzasz zamienić ciąg znaków, pamiętaj o ponownym przypisaniu zmiennej / właściwości do własnego zastąpienia, np .:
Za pomocą jQuery.prototype.text:
źródło
Mam tę metodę, nazywam ją metodą Derpa z powodu braku lepszej nazwy.
Uruchomienie go w JSPerf daje zaskakujące wyniki.
źródło
Bardziej niezawodna metoda: zajmuje się także usuwaniem początkowych i końcowych spacji, jeśli istnieją. Na przykład:
W twoim przykładzie nie było tych spacji, ale są one również bardzo częstym scenariuszem, a przyjętą odpowiedzią było przycięcie ich do pojedynczych spacji, takich jak: „The ... RED!”, Co zwykle nie jest potrzebne.
źródło
Bardziej wytrzymałe:
źródło
sugeruję
tylko dla spacji
LUB
do zamiany wielu zwrotów w pojedynczy zwrot również.
źródło
Wiem, że jestem spóźniony na przyjęcie, ale znalazłem fajne rozwiązanie.
Oto on:
źródło
Oto alternatywne rozwiązanie, jeśli nie chcesz używać zamiany (zamień spacje w ciągu bez użycia komendy replace javascript)
źródło
Kompleksowa nieszyfrowana odpowiedź dla początkujących i in.
To jest dla wszystkich manekinów, takich jak ja, które testują skrypty napisane przez niektórych z was, którzy nie działają.
Poniższe 3 przykłady to kroki, które podjąłem, aby usunąć znaki specjalne ORAZ dodatkowe spacje w następujących 3 witrynach (z których wszystkie działają idealnie) {1. EtaVisa.com 2. EtaStatus.com 3. Tikun.com}, więc wiem, że działają one doskonale.
Łączymy je razem z ponad 50 jednocześnie i NIE MA problemów.
// To usunęło znaki specjalne + 0-9 i dopuszcza tylko litery (wielkie i małe litery)
// To usunęło znaki specjalne i pozwala tylko na litery (wielkie i małe litery) oraz 0-9 i spacje
// To usunęło znaki specjalne i pozwala tylko na litery (wielkie i niższe) i 0-9 ORAZ spacje // .replace (/ \ s \ s + / g, "") na końcu usuwa nadmierne spacje // gdy I używane pojedyncze cudzysłowy, to nie działało.
:: NASTĘPNY :: Zapisz # 3 jako
a .js
// nazwałem mój NoDoubles.js:: NASTĘPNY :: Dołącz swój JS do swojej strony
Uwzględnij to w polu formularza :: np
Tak to wygląda
To usunie znaki specjalne, pozwoli na pojedyncze spacje i usunie dodatkowe spacje.
źródło
Również możliwość:
źródło
Lub jeśli chcesz również zastąpić karty:
źródło
Jquery ma funkcję trim (), która w zasadzie zamienia coś takiego „FOo Bar” w „FOo Bar”.
Jest to o wiele bardziej przydatne, ponieważ automatycznie usuwa puste miejsca na początku i na końcu łańcucha. Nie wymaga wyrażenia regularnego.
źródło
is replace nie jest używany, string = string.split (/ \ W + /);
źródło
źródło
Możemy użyć następującego wyrażenia regularnego objaśnionego za pomocą polecenia sed system. Podobne wyrażenie regularne może być używane w innych językach i platformach.
Dodaj tekst do pliku powiedz test
Możemy użyć następującego wyrażenia regularnego, aby zastąpić wszystkie białe spacje pojedynczym odstępem
Mam nadzieję, że to służy celowi
źródło
Spróbuj zastąpić wiele spacji jedną spacją.
Czytaj więcej @ Zastępowanie wielu spacji pojedynczą spacją
źródło
wynik:
źródło
Aby uzyskać większą kontrolę, możesz użyć funkcji zwrotnej zastępowania do obsługi wartości.
źródło
Ten skrypt usuwa wszelkie spacje (wiele spacji, tabulatorów, zwrotów itp.) Między słowami i przycięciami:
źródło
„wskaźnik myszy dotyk” .replace (/ ^ \ s + | \ s + $ | (\ s) + / g, „$ 1”) powinno załatwić sprawę!
źródło
Wiem, że musimy użyć wyrażenia regularnego, ale podczas wywiadu zostałem poproszony o zrobienie tego BEZ UŻYWANIA REGEX.
@slightlytyler pomógł mi przyjść z poniższym podejściem.
źródło