Показать сообщение отдельно
  #16 (permalink)  
Старый 08.09.2024, 16:00
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,790

Сообщение от SpaceAlarm
получил из текстового файла весь текст, потом через split разбил по \n
В итоге получили массив строк, я же предложил разбить весь текст сначала на массив отдельных сообщений (string[]), а потом уже эти сообщения разбирать, как вам захочется.

Upd. вы неправильно выбрали разделитель (separator), двойной вертикальный пробел - не лучшее решение, т.к. само сообщение может содержать несколько пустых строк. У вас каждое новое сообщение начинается со слов "От кого" либо "Кому", эти фразы и стоило использовать в кач-ве разделителя.

const text = `От кого:
Пользователь Маша Зайцева ([url]https://play.com/id1[/url])
01.01.2022 в 02:25:28
да

От кого:
Пользователь Карина Васильева ([url]https://play.com/id2[/url])
01.01.2022 в 03:25:22
все

От кого:
Пользователь Ларис Викторовна ([url]https://play.com/id23/url])
01.01.2022 в 03:28:22
Скинь сообщение

Кому:
Пользователь Ларис Викторовна (https://play.com/id3)
01.01.2022 в 04:25:11
вот держи
Прикреплено сообщение #1
От кого:
Пользователь Маша Зайцева (https://play.com/id4)
01.01.2022 в 02:25:28
да

От кого:
Пользователь Ларис Викторовна ([url]https://play.com/id2[/url])
01.01.2022 в 03:28:22

прикреплен файл #1 foto ([url]http://site.ru/a.png[/url])
`;

const segments = text.split(/(?<!прикреплено сообщение .+?\n)(от кого|кому)/iu).filter(Boolean);

const messages = segments.reverse().reduce((res, segment) => {
    if (['от кого', 'кому'].includes(segment.toLowerCase())) {
        res[res.length - 1] = segment + res[res.length - 1];
    } else {
        res.push(segment);
    }
    
    return res;
}, []).reverse();

console.log(messages)

Последний раз редактировалось Nexus, 08.09.2024 в 16:25.
Ответить с цитированием