Регулярное выражение для замены нескольких пробелов одним пробелом



Дана строка типа:



"The dog      has a long   tail, and it     is RED!"


какой jQuery или JavaScript magic можно использовать для сохранения пробелов только в одном пространстве max?



цель:



"The dog has a long tail, and it is RED!"
512   18  

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!"

Edit: это, вероятно, лучше, так как он нацелен на пространство, за которым следует 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, " ");
}

запуск его в JSPerf дает некоторые удивительные результаты.

более надежный:

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);

Я знаю, что я опоздал на вечеринку, но я нашел хорошее решение.

вот это:

var myStr = myStr.replace(/[ ][ ]*/g, ' ');

всесторонний незашифрованный ответ для новичков и др.

это для всех манекенов, таких как я, которые тестируют сценарии, написанные некоторыми из вас, ребята, которые не работают.

следующие 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"/>

это позволит удалить специальные символы, позволяющие одиночные пробелы и удалить лишние пробелы.

возможность:

str.replace( /\s+/g, ' ' )

Jquery имеет функцию trim (), которая в основном превращает что-то вроде этого "FOo Bar" в "FOo Bar".

var string = "  My     String with  Multiple lines    ";
string.trim(); // output "My String with Multiple lines"

Это гораздо более полезно, потому что это автоматически удаляет пробелы в начале и в конце строки, а также. Регулярное выражение не требуется.

var myregexp = new RegExp(/ {2,}/g);

str = str.replace(myregexp,' ');
var string = "The dog      has a long   tail, and it     is RED!";
var replaced = string.replace(/ +/g, " ");

или если вы хотите заменить вкладки:

var replaced = string.replace(/\s+/g, " ");

мы можем использовать следующее регулярное выражение, объясненное с помощью системной команды sed. Подобное регулярное выражение может использоваться в других языках и платформах.

добавить текст в файл проверка

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"

Comments

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