Usuń spacje wewnątrz ciągu w javascript

102

Czytałem to pytanie o trymowanie javascript, z odpowiedzią wyrażenia regularnego.

Następnie oczekuję, że przycinanie usunie wewnętrzną przestrzeń między Hello i World.

function myFunction() {
    alert("Hello World ".trim());
}

EDYTOWANE

Dlaczego się tego spodziewałem !?

Nonsens! Oczywiście przycinanie nie usuwa wewnętrznych spacji !, tylko początkowe i końcowe, tak działa przycinanie, to było bardzo złe pytanie, przepraszam.

Hernán Eche
źródło
10
przycinanie usuwa białe znaki z początku i końca łańcucha
Manse
3
Trim usuwa białe znaki z przed i po ciągu. Hello Worldjest już „przycięte”
Rocket Hazmat
@limelights To Show „HelloWorld” zamiast „Hello World”
Hernán Eche
4
@void: To nie jest „przycinanie”, to inny problem.
Rocket Hazmat

Odpowiedzi:

238

Do usuwania znaków spacji

"hello world".replace(/\s/g, "");

dla wszystkich białych znaków skorzystaj z sugestii Rocketa w komentarzach poniżej!

Henrik Andersson
źródło
139
Możesz użyć, .replace(/ /g, '')jeśli jest więcej niż raz miejsca.
Rocket Hazmat
@Rocket, to absolutna prawda, po prostu nie ma jeszcze zaktualizowanej odpowiedzi! Dzięki! :)
Henrik Andersson
47
@Juhana: Jeśli chcesz, aby usunąć pozostałe spacje też wtedy zrobić: .replace(/\s/g, '').
Rocket Hazmat
12
@RocketHazmat yes! poprawna odpowiedź! choć może to być nieco bardziej wydajne: str.replace (/ \ s + / g, '')
jackocnr
3
@PitchiahNatarajan \sdopasuje spacje, tabulatory i nowe linie.
Rocket Hazmat,
8

Prawdopodobnie dlatego, że zapomniałeś wdrożyć rozwiązanie w zaakceptowanej odpowiedzi . To kod, który sprawia, że trim()działa.

aktualizacja

Ta odpowiedź dotyczy tylko starszych przeglądarek. Nowsze przeglądarki najwyraźniej obsługują trim()natywnie.

John Conde
źródło
2
Niekoniecznie, niektóre przeglądarki mają to wbudowane. :-P
Rocket Hazmat
1
Jest teraz obecny w większości nowoczesnych przeglądarek -> kangax.github.com/es5-compat-table
Manse
1

Możesz użyć metody zamiany ciągów za pomocą wyrażenia regularnego.

"Hello World ".replace(/ /g, "");

Metoda replace () zwraca nowy ciąg z niektórymi lub wszystkimi dopasowaniami wzorca zastąpionymi przez zastąpienie. Wzorzec może być ciągiem lub wyrażeniem regularnym

RegExp

  • / / - Spacje dopasowane do wyrażeń regularnych

  • g - flaga globalna; znajdź wszystkie dopasowania zamiast zatrzymywania się po pierwszym dopasowaniu

JSON C11
źródło
1

Możesz użyć

"Hello World ".replace(/\s+/g, '');

trim()usuwa tylko końcowe spacje w łańcuchu (pierwsze i ostatnie w łańcuchu). W tym przypadku regExp jest szybszy, ponieważ można usunąć jedną lub więcej spacji w tym samym czasie.

Jeśli zmienisz zastępczy pusty ciąg na „$”, różnica stanie się znacznie wyraźniejsza:

var string= '  Q  W E   R TY ';
console.log(string.replace(/\s/g, '$'));  // $$Q$$W$E$$$R$TY$
console.log(string.replace(/\s+/g, '#')); // $Q$W$E$R$TY$

Porównanie wydajności - /\s+/gjest szybsze. Zobacz tutaj: http://jsperf.com/s-vs-s

ArlanG
źródło
Obecnie akceptowane odpowiedź robi to samo. Proszę przedstawić kilka odpowiednich testów wskazujących, że jest to szybsze niż ta odpowiedź o cokolwiek więcej niż nanosekundy.
Heretic Monkey
@HereticMonkey Zaktualizowano!
ArlanG