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

<pre id="result" style="margin-bottom: 15px"></pre>
<pre id="text-to-parse" contenteditable>
От кого:
Пользователь Маша Зайцева (https://play.com/id1)
01.01.2022 в 02:25:28
да

От кого:
Пользователь Карина Васильева (https://play.com/id2)
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])
</pre>

<script>
const messagePattern = [
    '^(?<direction>От кого|Кому):\\n',
    '^Пользователь (?<user_name>.+)(?:\\n|\\s)\\((?<user_link>.+)\\)\\n',
    '^(?<date>\\S+) в (?<time>.+)\\n',
    '^(?<message>.*)\\n?',
    '(?:' + '(?<=\\n{2})' + '^Прикреплен файл (?<file_name>.+) \\((?<file_link>.+)\\)' + ')?',
].join('');

const forwardedMessagePattern = [
    '(?<forwarded_message>',
    '^Прикреплено сообщение (?<forwarded_message_number>.+)\\n', 
    messagePattern.replace(/\?<(\w+)>/guim, '?<forwarded_message_$1>'),
    ')?\\n?',
].join('');

const pattern = `${messagePattern}\\n?${forwardedMessagePattern}`;
const messageRegex = new RegExp(pattern, 'uim');
const messagesRegex = new RegExp(pattern, 'guim');

const getMessages = (string) => string.match(messagesRegex);
const parseMessage = (message) => message.match(messageRegex)?.groups;


(node => {
    const resultContainer = document.querySelector('#result');
    if (!resultContainer || !node) {
        return;
    }
    
    node.addEventListener('input', () => {
        const data = getMessages(node.textContent)?.map(message => parseMessage(message));
        
        resultContainer.textContent = JSON.stringify(data, null, 4);
    });
    
    node.dispatchEvent(new Event('input'));
})(document.querySelector('#text-to-parse'));
</script>

Последний раз редактировалось Nexus, 08.09.2024 в 13:47. Причина: fix typo
Ответить с цитированием