Замените несколько пробелов одним пробелом в строке JavaScript - PullRequest
186 голосов
/ 28 мая 2011

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

Кто-нибудь? Я попытался найти в Google, но у меня ничего не получилось.

Спасибо

Ответы [ 11 ]

356 голосов
/ 28 мая 2011

Примерно так:

var s = "  a  b     c  ";

console.log(
  s.replace(/\s+/g, ' ')
)
61 голосов
/ 30 мая 2011

Вы можете дополнить String для реализации этих поведений в виде методов, например:

String.prototype.killWhiteSpace = function() {
    return this.replace(/\s/g, '');
};

String.prototype.reduceWhiteSpace = function() {
    return this.replace(/\s+/g, ' ');
};

Теперь вы можете использовать следующие элегантные формы для создания нужных вам строк:

"Get rid of my whitespaces.".killWhiteSpace();
"Get rid of my extra        whitespaces".reduceWhiteSpace();
20 голосов
/ 30 мая 2011

Использование регулярного выражения с функцией замены делает свое дело:

string.replace(/\s/g, "")
12 голосов
/ 25 марта 2014

Вот решение без регулярных выражений (просто для удовольствия):

var s = ' a   b   word word. word, wordword word   ';

// with ES5:
s = s.split(' ').filter(function(n){ return n != '' }).join(' ');
console.log(s); // "a b word word. word, wordword word"

// or ES6:
s = s.split(' ').filter(n => n).join(' '); 
console.log(s); // "a b word word. word, wordword word"

Он разбивает строку на пробелы , удаляет из них все пустые элементы массива из массива (те, которые были больше одного пробела), иснова объединяет все слова в строку с одним пробелом между ними.

12 голосов
/ 28 мая 2011

Полагаю, вы хотите удалить пробелы из начала и / или конца строки (вместо удаления всех пробелов?

Если это так, вам понадобится регулярное выражение, подобное этому:

mystring = mystring.replace(/(^\s+|\s+$)/g,' ');

Это удалит все пробелы в начале или конце строки. Если вы хотите обрезать пробелы только с конца, регулярное выражение будет выглядеть так:

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

Надеюсь, это поможет.

8 голосов
/ 24 апреля 2012

jQuery.trim () работает хорошо.

http://api.jquery.com/jQuery.trim/

7 голосов
/ 28 апреля 2013

Я знаю, что не должен быть некромантным по предмету, но, учитывая детали вопроса, я обычно расширяю его до значения:

  • Я хочу заменить несколько вхождений пробела внутри строкиодин пробел
  • ... и ... Мне не нужны пробелы в начале или конце строки (trim)

Для этого я использую такой код (круглые скобки в первом регулярном выражении существуют только для того, чтобы сделать код немного более читабельным ... регулярные выражения могут быть неприятны, если вы не знакомы с ними):методы в String-object возвращают строковый объект, для которого вы можете вызвать другой метод (как jQuery и некоторые другие библиотеки).Гораздо более компактный способ написания кода, если вы хотите последовательно выполнить несколько методов для одного объекта.

4 голосов
/ 22 октября 2012

var x = "Test Test Test" .split ("") .join (""); предупреждение (х);

1 голос
/ 25 апреля 2016

Как насчет этого?

"my test string \t\t with crazy stuff is cool ".replace(/\s{2,9999}|\t/g, ' ')

выходы "my test string with crazy stuff is cool "

Этот также избавляется от любых вкладок

0 голосов
/ 02 августа 2017

Попробуйте это.

var string = "         string             1";
string = string.trim().replace(/\s+/g, ' ');

результат будет

string 1

То, что произошло здесь, это то, что он сначала обрезает внешние пробелы, используя trim(), а затем обрезает внутренние пробелы, используя .replace(/\s+/g, ' ').

...