Разделять массив из файла по нескольким символам
Знатоки, нужен хелп. Перебираю массив из файла. Элементы заносятся по принципу через каждый знак запятой новый элемент. Далее заносится в 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>