Замените несколько пробелов одним пробелом в строке JavaScript
У меня есть строки с дополнительными пробелами, каждый раз, когда есть более одного пробела, я бы хотел, чтобы это был только один.
кого? Я попытался найти google, но ничего не получилось.
спасибо
11 ответов
Вы можете увеличить строку, чтобы реализовать эти поведения как методы, как в:
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();
Я предполагаю, что вы хотите очистить пробелы от начала и / или конца строки (вместо удаления все пробелы?
Если это так, вам понадобится регулярное выражение, подобное этому:
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"
он разбивает строку на пробелы, удаляет их все из массива и снова объединяет все слова с одним пробелом между ними.
Я знаю, что я не должен некромантию на тему, но учитывая детали вопроса, я обычно расширяю его, чтобы означать:
- Я хочу заменить несколько вхождений пробелов внутри строки одним пробелом
- ...и... Мне не нужны пробелы в начале или конце строки (trim)
для этого я использую такой код (скобки на первом регулярном выражении есть только для того, чтобы сделать код немного более читаемым ... regexps может быть болью, если вы не знакомы с ними):
s = s.replace(/^(\s*)|(\s*)$/g, '').replace(/\s+/g, ' ');
причина этого заключается в том, что методы String-object возвращают строковый объект, на котором вы можете вызвать другой метод (так же, как jQuery и некоторые другие библиотеки). Гораздо более компактный способ кода, если вы хотите выполнить несколько методов на одном объекте последовательно.
Как насчет этого?
"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, ' ')
.