Замените несколько пробелов одним пробелом в строке JavaScript

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

кого? Я попытался найти google, но ничего не получилось.

спасибо

11 ответов


что-то вроде этого:

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

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

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();

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

string.replace(/\s/g, "")

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

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

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

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

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

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


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

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"

он разбивает строку на пробелы, удаляет их все из массива и снова объединяет все слова с одним пробелом между ними.


с помощью jQuery.отделка() работает хорошо.

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


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

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

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

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

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


var x = " Test Test Test ".расщеплять.)" "(присоединяться(""); alert (x);


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

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

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

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


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

$j('#fragment_key').bind({
    keypress: function(e){
        var key = e.keyCode;
    var character = String.fromCharCode(key); 
    if(character.match( /[' ']/)) {
        alert("Blank space is not allowed in the Name");
        return false;
        }
    }
});
  • создайте функцию JQuery .
  • это событие нажатия клавиши.
  • инициализировать переменную.
  • дайте условие, чтобы соответствовать символу
  • показать предупреждающее сообщение для соответствующего состояния.

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

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

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

string 1

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