Регулярное выражение для замены нескольких пробелов на один пробел
Заголовок: Удаление лишних пробелов в строке с помощью jQuery или JavaScript
Текст проблемы: У меня есть строка, которая выглядит так:
"The dog has a long tail, and it is RED!"
Мне нужно использовать jQuery или JavaScript для того, чтобы уменьшить количество пробелов до одного пробела между словами.
Цель:
Получить строку в следующем виде:
"The dog has a long tail, and it is RED!"
Как можно реализовать это с помощью какого-либо кода?
5 ответ(ов)
Если вам нужно учесть также табуляции, переносы строк и т.д., просто замените \s\s+
на ' '
:
string = string.replace(/\s\s+/g, ' ');
Если же вы хотите обработать только пробелы (без учета табуляций, переносов строк и т.п.), используйте следующий код:
string = string.replace(/ +/g, ' ');
Поскольку вам, похоже, интересна производительность, я провел профилирование с помощью Firebug. Вот результаты, которые я получил:
str.replace( / +/g, ' ' ) -> 380 мс
str.replace( /\s\s+/g, ' ' ) -> 390 мс
str.replace( / {2,}/g, ' ' ) -> 470 мс
str.replace( / +/g, ' ' ) -> 790 мс
str.replace( / +(?= )/g, ' ') -> 3250 мс
Это на Firefox, при выполнении 100 тысяч замен строк.
Я рекомендую вам провести собственное профилирование с помощью Firebug, если вы считаете, что производительность является проблемой. Люди, как правило, плохо предсказывают, где находятся узкие места в их программах.
(Также обратите внимание, что в инструменте разработчика IE 8 также имеется встроенный профайлер — возможно, стоит проверить, какова производительность в IE.)
Для замены всех последовательностей из двух и более пробелов в строке на один пробел, вы можете использовать метод replace
с регулярным выражением:
var str = "The dog has a long tail, and it is RED!";
str = str.replace(/ {2,}/g, ' ');
Это регулярное выражение ищет две или более пробела и заменяет их на один пробел.
EDIT: Если вы хотите заменить все виды пробелов (например, табуляции и пробелы), наиболее эффективный способ будет выглядеть следующим образом:
str = str.replace(/\s{2,}/g, ' ');
Здесь \s
соответствует любым пробельным символам (включая пробелы, табуляции и переносы строк), что позволяет более универсально обрабатывать строку.
Более надежный метод: этот код также удаляет начальные и конечные пробелы, если они существуют. Например:
// ОБРАТИТЕ ВНИМАНИЕ на возможные начальные и конечные пробелы
var str = " The dog has a long tail, and it is RED! "
str = str.replace(/^\s+|\s+$|\s+(?=\s)/g, "");
// str -> "The dog has a long tail, and it is RED !"
Ваш пример не содержал этих пробелов, но они являются очень распространенным сценарием, и в принятом ответе пробелы просто сводились к единичным, например: " The ... RED! ", что обычно не соответствует вашим требованиям.
Вот одно из решений, хотя оно будет заменять все пробельные символы:
"The dog has a long tail, and it is RED!".replace(/\s\s+/g, ' ')
Результат будет таким:
"The dog has a long tail, and it is RED!"
Правка: Это, вероятно, лучше, так как оно нацелено на пробел, за которым следует один или более пробелов:
"The dog has a long tail, and it is RED!".replace(/ +/g, ' ')
Результат:
"The dog has a long tail, and it is RED!"
Альтернативный способ:
"The dog has a long tail, and it is RED!".replace(/ {2,}/g, ' ')
Результат:
"The dog has a long tail, and it is RED!"
Я не использовал /\s+/
самостоятельно, так как это заменяет пробелы, состоящие из одного символа, несколько раз и может быть менее эффективным, поскольку охватывает больше, чем необходимо.
Я не проводил глубокое тестирование этих решений, так что дайте знать, если есть ошибки.
Кроме того, если вы собираетесь заменять строку, не забудьте присвоить переменной или свойству его замену, например:
var string = 'foo'
string = string.replace('foo', '')
Используя jQuery.prototype.text:
var el = $('span:eq(0)');
el.text(el.text().replace(/\d+/, ''))
Как перенаправить на другую веб-страницу?
Прокрутка к элементу с использованием jQuery
jQuery: Получение Выбранного Значения Из Выпадающего Списка
Проверка соответствия строки регулярному выражению в JS
Существует ли ссылка на "последнюю" библиотеку jQuery в Google APIs?