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



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



кого?
Я попытался найти google, но ничего не сработало для меня.



спасибо

1270   11  

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)

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

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, ' ').

Comments

    Ничего не найдено.