<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>