Удалить пробелы внутри строки в javascript


102

Я прочитал этот вопрос об обрезке javascript с ответом на регулярное выражение.

Затем я ожидаю, что обрезка удалит внутреннее пространство между Hello и World.

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

ИЗМЕНЕНО

Почему я этого ожидал !?

Ерунда! Очевидно, что trim не удаляет внутренние пробелы !, только ведущие и конечные, вот как работает обрезка, тогда это был очень неправильный вопрос, мои извинения.


10
trim удаляет пробелы в начале и в конце строки
Manse

3
Обрезка удаляет пробелы до и после строки. Hello Worldуже «обрезано».
Rocket Hazmat

@limelights покажут "HelloWorld" вместо "Hello World"
Эрнан Эче

4
@void: Это не «обрезка», это другая проблема.
Rocket Hazmat

Ответы:


238

Для удаления пробела используйте

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

для всего белого пространства используйте предложение Rocket в комментариях ниже!


139
Возможно, вы захотите использовать, .replace(/ /g, '')если есть более одного места.
Rocket Hazmat

@Rocket, это абсолютно верно, просто еще не обновил ответ! Спасибо! :)
Хенрик Андерссон

47
@Juhana: Если вы хотите удалить другие пробелы тоже тогда делать: .replace(/\s/g, '').
Rocket Hazmat

12
@RocketHazmat да! правильный ответ! хотя это могло бы быть немного более эффективным: str.replace (/ \ s + / g, '')
jackocnr 08

3
@PitchiahNatarajan \sбудет соответствовать пробелам, табуляциям и новым строкам.
Rocket Hazmat

8

Вероятно, потому, что вы забыли реализовать решение в принятом ответе . Это код, который заставляет trim()работать.

Обновить

Этот ответ применим только к старым браузерам. Новые браузеры, по-видимому, поддерживают его trim()изначально.


2
Не обязательно, в некоторых браузерах он встроен. :-P
Rocket Hazmat

1
Сейчас он присутствует в большинстве современных браузеров -> kangax.github.com/es5-compat-table
Мансе

1

Вы можете использовать метод замены Strings с регулярным выражением.

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

Метод replace () возвращает новую строку с некоторыми или всеми совпадениями шаблона, замененными на замену. Шаблон может быть строкой или регулярным выражением.

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.