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

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

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

Спасибо

Ответ 1

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

var s = "  a  b     c  ";

console.log(
  s.replace(/\s+/g, ' ')
)

Ответ 2

Вы можете увеличить 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();

Ответ 3

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

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

Ответ 4

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

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

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

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

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

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

Ответ 5

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

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"

Ответ 7

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

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

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

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

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

Ответ 8

var x = "Test Test Test".split( ").join(" "); оповещение (х);

Ответ 9

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

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

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

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

Ответ 10

Если вы хотите ограничить использование пользователем пробела в имени, просто создайте оператор 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.
  • Это ключевое событие для прессы.
  • Инициализировать переменную.
  • Дать условие для соответствия символу
  • отобразить сообщение о предупреждении для вашего согласованного состояния.

Ответ 11

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

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

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

string 1

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