Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Много кода в скрипте (https://javascript.ru/forum/jquery/78334-mnogo-koda-v-skripte.html)

pautinaweb 28.08.2019 23:45

Много кода в скрипте
 
Помогите правильно написать функцию.
Мне надо нужно из строки удалить:
  1. Удалить пробелы за и после запятых (,)
  2. Удалить пробелы за и после прямого слеша (|)
  3. Повторяющиеся двойные запятые (,,)
  4. Повторяющиеся двойные символы слеша (||)
  5. Удалить запятую перед слешем (,|)
  6. Удалить слеши, пробелы или запятые в конце строки
  7. Ну и все лишние пробелы
на писал функцию по событию:
$("#ID").on('blur', function(){
        var str = $(this).val();
        str = str.replace(/\s+/g, ' ').trim();
        str = str.replace(/\,,+/g, ',').trim();
        str = str.replace(/\,+/g, ',').trim();
        str = str.replace(/\s\,+/g, ',').trim();
        str = str.replace(/\,\s+/g, ',').trim();
        str = str.replace(/\s\|+/g, ',').trim();
        str = str.replace(/\|\s+/g, '|').trim();
        str = str.replace(/\|\s+/g, '|').trim();
        str = str.replace(/\|\|+/g, '|').trim();
        str = str.replace(/\,\|+/g, '|').trim();
        str = str.replace(/,\s*$/, '');
        str = str.replace(/\|*$/, '');
        $(this).val(str.trim());
    });


Вроде работает, но мне кажется это какой то бред))) в регулярках не разбираюсь особо((
Подскажите можно ли как то компактнее код сделать или может в JQuery какие то способы есть для этого более удобные.

То что нужно на примере
мне из этого:
слово слово, слово, слово слово|слово , ,слово слово ,слово ,|слово ,слово ,слово слово ,слово |
Нужно получить это:
слово слово,слово,слово слово|слово,слово слово,слово|слово,слово,сло во слово,слово

рони 29.08.2019 01:32

pautinaweb,
<script>
var str = "слово слово, слово, слово слово|слово , ,слово слово ,слово ,|слово ,слово ,слово слово ,слово |";
document.write(str + "<br>")
str = str.trim().replace(/([\s|,]+)([^\s|,]|$)/g, function(a, b, c) {
   return (!c ? "" : /\|/.test(b) ? "|" : /,/.test(b) ? "," : " ") + c
});
document.write(str);
</script>

pautinaweb 29.08.2019 02:31

Ну это не совсем то, что мне нужно, самое главное для меня, это пробелы перед и после запятых, и слешей | убрать

ksa 29.08.2019 07:43

Цитата:

Сообщение от pautinaweb
самое главное для меня, это пробелы перед и после запятых, и слешей | убрать

Как вариант...
var str='слово1, слово2 ,слово3 , слово4| слово5 |слово6 | слово7';
alert(str.replace(/\s*([,|])\s*/g,'$1'));

pautinaweb 29.08.2019 15:55

Спасибо, за помощь сделал так:
var str='слово1, слово2 ,слово3 слово4 слово5, слово6 слово7,| слово8 слово9 слово10, слово11 |,слово12 , | слово13,       слово14 слово15 |';
        str = str.replace(/(,\s*$)|(\|*$)/, '');
        str = str.replace(/(,\|+)|(\|,+)/g, '|');
        str = str.replace(/\s*([,|])\s*/g,'$1').trim();
        alert(str);

Код сократился, но если кто знает как сделать в ону строку, было бы вообще супер!

рони 29.08.2019 16:33

Цитата:

Сообщение от pautinaweb
как сделать в ону строку,

убрать все
;
        str = str

pautinaweb 29.08.2019 20:41

Да это убрал, когда в функцию вставлял


Часовой пояс GMT +3, время: 14:05.