Разделять массив из файла по нескольким символам

Знатоки, нужен хелп. Перебираю массив из файла. Элементы заносятся по принципу через каждый знак запятой новый элемент. Далее заносится в div с определённым классом.

 $.get("./files/city_list.txt", function(data) {      
    let doctors = data.split(',');  
    $.each(doctors, function() {
        $('.selectCity__list').append('<div class="selectCity__item">'+this+'</div>');
    });

Вопрос в том, можем ли мы разделять еще по знаку ";" и заносить в другой div с другим классом, при этом не нарушив последовательности? Заранее извиняюсь за тупой вопрос, в js не силён


Ответы (1 шт):

Автор решения: Deonis

const divComma = document.querySelector('.comma');
const divSemicolon = document.querySelector('.semicolon');
const pastItem = (target, txt, cls) => target.insertAdjacentHTML('beforeend', `<li class="${cls}">${txt.replace(/[,;]$/, '')}</li>`);

'aa,bb,cc;dd,ee,ff;gg;hh,ii;'.match(/[^;,]+[,;]/g).forEach(s => {
  if (s.indexOf(',') !== -1) {
    pastItem(divComma, s, 'selectCity__list');
  } else {
    pastItem(divSemicolon, s, 'selectCity__groups');
  }
});
.selectCity__list {
  color: #060;
}

.selectCity__groups {
  color: #f00;
}
<ul class="comma"></ul>
<ul class="semicolon"></ul>

Или такой, более расширяемый вариант

const pastItem = (d, txt) => d.target.insertAdjacentHTML('beforeend', `<li class="${d.cls}">${txt.replace(/[,;]$/, '')}</li>`);

const templ = {
  comma: {
    cls: 'selectCity__list',
    target: document.querySelector('.comma')
  },
  semicolon: {
    cls: 'selectCity__groups',
    target: document.querySelector('.semicolon')
  }
};

const str = 'aa,bb,cc;dd,ee,ff;gg;hh,ii;';
for (const match of str.matchAll(/(?<comma>[^;,]+[,])|(?<semicolon>[^;,]+[;])/g)) {
  for (const [k, txt] of Object.entries(match.groups)) {
    if (txt && templ.hasOwnProperty(k)) {
      pastItem(templ[k], txt);
    }
  }
}
.selectCity__list {
  color: #060;
}

.selectCity__groups {
  color: #f00;
}
<ul class="comma"></ul>
<ul class="semicolon"></ul>

→ Ссылка