Видаліть пробіли всередині рядка в JavaScript


101

Я читав це питання про обробку javascript, з відповіддю на регулярний вираз.

Тоді я очікую обробку, щоб видалити внутрішній простір між Hello і World.

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

ВИДАЛЕНО

Чому я цього очікував !?

Нісенітниця! Очевидно, trim не прибирає внутрішні пробіли !, лише провідні та кінцеві, ось як працює trim, тоді це було дуже неправильне питання, мої вибачення.


10
обробка видаляє пробіли з початку та кінця струни
Manse

3
Обрізка видаляє пробіли до і після рядка. Hello Worldвже "підстрижена".
Ракета Hazmat

@limelights Показати "HelloWorld" замість "Hello World"
Ернан Еш,

4
@void: Це не "обрізка", це інша проблема.
Ракета Hazmat

Відповіді:


236

Для використання видалення символів пробілу

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

для всіх пробілів використовуйте пропозицію Rocket у коментарях нижче!


137
Можливо, ви захочете скористатися, .replace(/ /g, '')якщо місця є кілька разів.
Racket Hazmat

@Rocket, це абсолютно вірно, просто поки не оновлюю відповідь! Дякую! :)
Генрік Андерссон,

47
@Juhana: Якщо ви хочете видалити інші прогалини теж тоді робити: .replace(/\s/g, '').
Ракета Хазмат,

12
@RocketHazmat так! правильна відповідь! хоча це може бути трохи ефективніше: str.replace (/ \ s + / g, '')
jackocnr

3
@PitchiahNatarajan \sзбігатиме пробіли, вкладки та нові рядки.
Rocket Hazmat

8

Можливо, тому, що ви забули застосувати рішення у прийнятій відповіді . Це код, який змушує trim()працювати.

оновлення

Ця відповідь стосується лише старих браузерів. Нові веб-переглядачі, мабуть, підтримують trim()своєрідне використання.


2
Не обов'язково деякі браузери вбудовані в неї. :-P
Rocket Hazmat

1
Її присутні в більшості сучасних веб-переглядачів -> kangax.github.com/es5-compat-table
Manse

1

Ви можете використовувати метод заміни рядків з регулярним виразом.

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

Метод substitu () повертає нову рядок з деякими або всіма відповідностями шаблону, заміненого заміною. Шаблон може бути рядком або RegExp

RegExp

  • / / - Регулярні вирази, що відповідають пробілам

  • g - Глобальний прапор; знайти всі матчі, а не зупинятися після першого матчу


1

Можна використовувати

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

trim()лише видаляє кінцеві пробіли в рядку (перший і останній на ланцюжку). У цьому випадку цей regExp швидше, тому що ви можете одночасно видалити один або кілька пробілів.

Якщо ви заміните порожній рядок заміни на "$", різниця стає набагато зрозумілішою:

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$

Порівняння продуктивності - /\s+/gшвидше. Дивіться тут: http://jsperf.com/s-vs-s


В даний час прийнята відповідь робить те саме. Будь ласка, подайте кілька відповідних тестів, які вказують на те, що це швидше, ніж відповідь на що-небудь більше наносекунд.
Єретична мавпа

@HereticMonkey Оновлено!
ArlanG
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.