Регулярное выражение для замены нескольких пробелов одним пробелом
Дана строка типа:
"The dog has a long tail, and it is RED!"
какую магию jQuery или JavaScript можно использовать для сохранения пробелов только до одного пробела max?
цель:
"The dog has a long tail, and it is RED!"
18 ответов
учитывая, что вы также хотите покрыть вкладки, новые строки и т. д., Просто замените \s\s+
С ' '
:
string = string.replace(/\s\s+/g, ' ');
если вы действительно хотите покрыть только пробелы (и, следовательно, не вкладки, новые строки и т. д.), Сделайте так:
string = string.replace(/ +/g, ' ');
поскольку вы, похоже, заинтересованы в производительности, я профилировал их с firebug. Вот результаты, которые я получил:
str.replace( / +/g, ' ' ) -> 790ms
str.replace( / +/g, ' ' ) -> 380ms
str.replace( / {2,}/g, ' ' ) -> 470ms
str.replace( /\s\s+/g, ' ' ) -> 390ms
str.replace( / +(?= )/g, ' ') -> 3250ms
Это на Firefox, работает замена строк 100k.
Я рекомендую вам сделать свои собственные тесты профилирования с firebug, если вы считаете, что производительность является проблемой. Люди, как известно, плохо предсказывают, где узкие места в их программах лежат.
(также обратите внимание, что панель инструментов разработчика IE 8 также имеет встроенный профилировщик -- it возможно, стоит проверить, какова производительность в IE.)
var str = "The dog has a long tail, and it is RED!";
str = str.replace(/ {2,}/g,' ');
EDIT: Если вы хотите заменить все виды пробелов, наиболее эффективным способом будет следующее:
str = str.replace(/\s{2,}/g,' ');
это одно решение, хотя оно будет нацелено все Пространство символов:
"The dog has a long tail, and it is RED!".replace(/\s\s+/g, ' ')
"The dog has a long tail, and it is RED!"
редактировать: это, вероятно, лучше, так как он нацелен на пространство, за которым следует 1 или более пробелов:
"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+/
сам по себе, так как это заменяет пробелы, которые охватывают 1 символ несколько раз и могут быть менее эффективными, поскольку он нацелен больше, чем необходимо.
Я не глубоко проверить любой из них так lmk, если есть ошибки.
кроме того, если вы собираетесь сделать замену строки, Не забудьте повторно назначить переменную / свойство своей собственной замене, например:
var string = 'foo'
string = string.replace('foo', '')
использование jQuery.прототип.текст:
var el = $('span:eq(0)');
el.text( el.text().replace(/\d+/, '') )
У меня есть этот метод, я называю его методом Derp из-за отсутствия лучшего имени.
while (str.indexOf(" ") !== -1) {
str = str.replace(/ /g, " ");
}
более надежный:
function trim(word) { word = word.replace(/[^\x21-\x7E]+/g, ' '); // change non-printing chars to spaces return word.replace(/^\s+|\s+$/g, ''); // remove leading/trailing spaces }
более надежный метод: это позаботится о и удаление начальных и конечных пробелов, если они существуют. Например:
// NOTE the possible initial and trailing spaces
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 ... Красный! - а это не то, что вам обычно нужно.
предлагаю
string = string.replace(/ +/g," ");
для всего пространства
или
string = string.replace(/(\s)+/g,"");
для превращения нескольких возвратов в один возврат также.
вот альтернативное решение, если вы не хотите использовать replace (заменить пробелы в строке без использования replace javascript)
var str="The dog has a long tail, and it is RED!";
var rule=/\s{1,}/g;
str = str.split(rule).join(" ");
document.write(str);
всесторонний незашифрованный ответ для новичков и др.
это для всех манекенов, как я, которые тестируют сценарии, написанные некоторыми из вас, ребята, которые не работают.
следующие 3 примера-это шаги, которые я предпринял, чтобы удалить специальные символы и дополнительные пробелы на следующих 3 веб-сайтах (все из которых работают отлично) {1. EtaVisa.com 2. EtaStatus.com 3. Tikun.com} так что я знаю, что они отлично работают.
мы приковали эти вместе с более чем 50 за раз и никаких проблем.
/ / это удалены специальные символы + 0-9 и позволяет только буквы (верхний и нижний регистр)
function NoDoublesPls1()
{
var str=document.getElementById("NoDoubles1");
var regex=/[^a-z]/gi;
str.value=str.value.replace(regex ,"");
}
/ / это удалены специальные символы и позволяет только буквы (верхний и нижний регистр) и 0-9 и пробелы
function NoDoublesPls2()
{
var str=document.getElementById("NoDoubles2");
var regex=/[^a-z 0-9]/gi;
str.value=str.value.replace(regex ,"");
}
/ / это удалены специальные символы и позволяет только буквы( верхний и нижний регистр) и 0-9 и пробелы // Этот. заменить (/\s\s+ / g," ") в конце удаляет излишние пробелы // когда я использовал одинарные кавычки, это не сработало.
function NoDoublesPls3()
{ var str=document.getElementById("NoDoubles3");
var regex=/[^a-z 0-9]/gi;
str.value=str.value.replace(regex ,"") .replace(/\s\s+/g, " ");
}
:: NEXT::
Спасти #3 как a .js
/ / я назвал свой NoDoubles.js
:: NEXT:: Включите JS в свою страницу
<script language="JavaScript" src="js/NoDoubles.js"></script>
включите это в поле формы:: например,
<INPUT type="text" name="Name"
onKeyUp="NoDoublesPls3()" onKeyDown="NoDoublesPls3()" id="NoDoubles3"/>
так, что это выглядит так
<INPUT type="text" name="Name" onKeyUp="NoDoublesPls3()" onKeyDown="NoDoublesPls3()" id="NoDoubles3"/>
это позволит удалить специальные символы, позволяющие одиночные пробелы и удалить лишние пробелы.
Jquery имеет функцию trim (), которая в основном превращает что-то вроде этого "foo Bar" в "FOo Bar".
var string = " My String with Multiple lines ";
string.trim(); // output "My String with Multiple lines"
Это гораздо более полезно, потому что это автоматически удаляет пробелы в начале и в конце строки, а также. Регекс не нужен.
var string = "The dog has a long tail, and it is RED!";
var replaced = string.replace(/ +/g, " ");
или если вы хотите заменить вкладки:
var replaced = string.replace(/\s+/g, " ");
мы можем использовать следующее регулярное выражение, объясненное с помощью системной команды sed. Аналогичное регулярное выражение может использоваться и на других языках и платформах.
добавьте текст в какой-нибудь файл, скажем test
manjeet-laptop:Desktop manjeet$ cat test
"The dog has a long tail, and it is RED!"
мы можем использовать следующее регулярное выражение для замены всех пробелов одним пробелом
manjeet-laptop:Desktop manjeet$ sed 's/ \{1,\}/ /g' test
"The dog has a long tail, and it is RED!"
надеюсь, это служит цели
попробуйте заменить несколько пробелов одним пробелом.
<script type="text/javascript">
var myStr = "The dog has a long tail, and it is RED!";
alert(myStr); // Output 'The dog has a long tail, and it is RED!'
var newStr = myStr.replace(/ +/g, ' ');
alert(newStr); // Output 'The dog has a long tail, and it is RED!'
</script>
Читать далее @ замена нескольких пробелов одним пробелом
var text = `xxx df dfvdfv df
dfv`.split(/[\s,\t,\r,\n]+/).filter(x=>x).join(' ');
результат:
"xxx df dfvdfv df dfv"