Как удалить пробелы из строки, используя JavaScript?

553

Как убрать пробелы в строке? Например:

Входные данные:

'/var/www/site/Brand new document.docx'

Вывод:

'/var/www/site/Brandnewdocument.docx'
JLuiz
источник
мое решение" ahm ed ".split('').filter(e => e.trim().length).join('')
UA_

Ответы:

1225

Эта?

str = str.replace(/\s/g, '');

пример

var str = '/var/www/site/Brand new document.docx';

document.write( str.replace(/\s/g, '') );


Обновление: на основе этого вопроса это:

str = str.replace(/\s+/g, '');

это лучшее решение. Он дает тот же результат, но делает это быстрее.

Регулярное выражение

\sявляется регулярным выражением для «пробела» и gявляется «глобальным» флагом, что означает соответствие ВСЕ \s(пробелы).

Отличное объяснение +можно найти здесь .

Как примечание, вы можете заменить содержимое между одинарными кавычками на что угодно, поэтому вы можете заменить пробел любой другой строкой.

Шиме Видас
источник
@Gaurav Я смотрел похожие ответы на SO, и я вижу .replace(/\s+/g, '')чаще. Есть ли разница между этим и моим ответом?
Шиме Видас
в этом случае нет разницы. Но + используется для поиска хотя бы одного вхождения.
Гаурав
1
Глупый я, у меня сложилось впечатление, .replace(' ','')что сработает. Очень признателен!
Энди Мерсер
3
Оригинальный ответ с участием (на который Сайм ссылался в своем редактировании) +имеет только 60 голосов, если кто-то тоже хочет его / ее
написать
2
Будьте осторожны, чтобы случайно не привести в кавычки ваше регулярное выражение, например, .replace('/\s+/g', '')потому что оно попытается найти эту буквальную строку. Это сбило меня с толку раньше ...
RTF
75

var a = b = " /var/www/site/Brand new   document.docx ";

console.log( a.split(' ').join('') );
console.log( b.replace( /\s/g, '') ); 

Два способа сделать это!

rsplak
источник
4
Мне понравились split () и join ().
Эрик Миллиот-Мартинес
2
split ('') и join не удаляют \ n, \ t символы пробела, другой обходной путь - a.split (''). map (c => c.trim ()). join ('')
rab
36

Кратчайшие и быстрые :str.replace(/ /g, '');


Ориентир:

Вот мои результаты - (2018.07.13) MacOs High Sierra 10.13.3 для Chrome 67.0.3396 (64-разрядная версия), Safari 11.0.3 (13604.5.6), Firefox 59.0.2 (64-разрядная версия):

Короткие строки

Короткая строка, похожая на примеры из вопроса OP

введите описание изображения здесь

Самым быстрым решением для всех браузеров является / /g(regexp1a) - Chrome 17,7M (операция / сек), Safari 10,1M, Firefox 8,8M. Самым медленным для всех браузеров было split-joinрешение. Изменение к \sили добавить +или iк РегВыр замедляет обработку.

Длинные строки

Для строки около 3 миллионов символов:

  • regexp1a : Safari 50,14 операций в секунду, Firefox 18,57, Chrome 8,95
  • regexp2b : Safari 38.39, Firefox 19.45, Chrome 9.26
  • split-join : Firefox 26.41, Safari 23.10, Chrome 7.98,

Вы можете запустить его на своем компьютере: https://jsperf.com/remove-string-spaces/1

Камил Келчевски
источник
1
Интересно, что метод split-join теперь самый быстрый для меня в Firefox 73, за которым следует regexp1a на 53% медленнее.
Хакель
25

Следующий ответ @rsplak: на самом деле использование пути split / join быстрее, чем использование regexp. Смотрите пример теста производительности

Так

var result = text.split(' ').join('')

работает быстрее чем

var result = text.replace(/\s+/g, '')

Для небольших текстов это не актуально, но для случаев, когда важно время, например, в текстовых анализаторах, особенно при взаимодействии с пользователями, это важно.


С другой стороны, \s+обрабатывает более широкий спектр космических символов. Среди с \nи \t, он также соответствует \u00a0символу, и это то, что  включается, при получении текста с использованием textDomNode.nodeValue.

Поэтому я думаю, что здесь можно сделать следующий вывод: если вам нужно только заменить пробелы ' ' , используйте split / join. Если могут быть разные символы класса символов - используйтеreplace(/\s+/g, '')

Minstel
источник
1
это очень не так way faster . Я запустил тест, и он только на 2,19% быстрее, на моем Firefox 61.
vsync
2
  var output = '/var/www/site/Brand new document.docx'.replace(/ /g, ""); 
    or
  var output = '/var/www/site/Brand new document.docx'.replace(/ /gi,"");

Примечание. Хотя вы используете «g» или «gi» для удаления пробелов, оба ведут себя одинаково.

Если мы используем 'g' в функции замены, она проверит точное совпадение. но если мы используем 'gi', он игнорирует чувствительность к регистру.

для справки нажмите здесь .

Raveendra007
источник
0

Regex + Replace ()

Хотя регулярные выражения могут быть медленнее, во многих случаях разработчик манипулирует только несколькими строками одновременно, поэтому скорость не имеет значения. Хотя / / быстрее, чем / \ s /, наличие символа \ s объясняет, что происходит с другим разработчиком, возможно, более четко.

let string = '/var/www/site/Brand new document.docx';
let path = string.replace(/\s/g, '');
// path => '/var/www/site/Brandnewdocument.docx'

Split () + Join ()

Использование Split + Join позволяет в дальнейшем манипулировать цепочкой.

let string = '/var/www/site/Brand new document.docx';
let path => string.split('').map(char => /(\s|\.)/.test(char) ? '/' : char).join('');
// "/var/www/site/Brand/new/document/docx";
SoEzPz
источник