У меня есть текстовые строки для этих строк
Il Messaggero Рим 22 сентября 2023 г. Il Messaggero Рим 21 сентября 2023 г. Иль Мессаггеро 22 сентября 2023 г. Иль Мессаггеро 21 сентября 2023 г. Il Messaggero Рим 21 августа 2023 г. Il Messaggero Рим 20 августа 2023 г. Великая слава рока – 15 февраля 2023 г. Corriere della Sera Sette 26 августа 2023 г. и я пытаюсь сгруппировать их вот так и с такими именами
Il Messaggero Rome [сентябрь 2023 г.] Il Messaggero Рим [август 2023 г.] Иль Мессаггеро [август 2023 г.] Великая слава рока - [февраль 2023 г.] Corriere della Sera Sette [август 2023 г.] Вместо этого строки неправильно сгруппированы с неправильными включениями и названиями
сентябрь [сентябрь] Август [Август] февраль [февраль] "Corriere della Sera Sette, 25 августа 2023 г.", а также "Il Messaggero" ошибочно включены
сентябрь [сентябрь] Август [Август] но их следует рассматривать как отдельные элементы. На этом рисунке показана неправильная группировка:

Я попробовал использовать этот код
Функция для группировки текстов, например Il Messaggero, 21 сентября 2023 г. или Великая слава рока – 15 февраля 2023 г.
function groupByDate(date) { вар groupedData = {}; data.forEach(функция(элемент) { var date = item.id.match(/\d{1,2}\s(?:январь|февраль|март|апрель|май|июнь|июль|август|сентябрь|октябрь|ноябрь|декабрь)\s\d {4}/я); если (дата) { дата = дата[0].toLowerCase(); если (!groupedData[дата]) { groupedData[дата] = []; } groupedData[дата].push(элемент); } еще { если (!groupedData['другое']) { groupedData['другое'] = []; } groupedData['другое'].push(элемент); } }); вернуть сгруппированные данные; } Регулярное выражение для поиска
function ExtractGroup(text) { var containsNxM = /\d+x\d+/.test(text); var containsDate = /\d{1,2}\s(?:январь|февраль|март|апрель|май|июнь|июль|август|сентябрь|октябрь|ноябрь|декабрь)\s\d{4}/i. тест (текст); если (содержитNxM) { var match = text.match(/^([a-zA-Z\s]+\s\d+x)/); ответный матч? совпадение[0]: ''; } еще если (содержитДата) { var match = text.match(/\d{1,2}\s([a-zA-Z]+)\s\d{4}/i); ответный матч? совпадение[1]: ''; } еще { вернуть текст; } } Инициализация таблицы
function InitializeDataTable(data) { если (таблица данных) { dataTable.destroy(); } вар tableData = []; если (сгруппировано) { вар groupedData = {}; data.forEach(функция(элемент) { вар имя_группы = ExtractGroup(item.id); если (!groupedData[имягруппы]) { groupedData[имягруппы] = []; } groupedData[имя группы].push(элемент); }); // Вставляем журнал для проверки groupedData console.log("groupedData:", groupedData); for (var groupName в groupedData) { если (groupedData.hasOwnProperty(groupName)) { вар groupItems = groupedData[groupName]; вар tagText = groupItems[0].badge; var tagClass = 'badge-' + (badgeText || '').toLowerCase(); var commonText = groupName.split('[')[0].trim(); // Извлекаем общую часть из имени tableData.push({ "checkbox": '', "id": '' + tagText + ' ' + commonText + ' [' + groupName + ']', // Изменить здесь "имя пользователя": groupItems.map(function(item) { вернуть элемент.имя пользователя; }).join('
'), "extra": 'Загрузить', «showLinks»: groupItems.length > 2 }); } } Полный код инициализации таблицы находится ЗДЕСЬ, но я думаю, что для этой цели он бесполезен