[m1]Галифакс ([i]город в Канаде[/i])[/m]
[m1][p]г.[/p] Хадалык ([i]Синьцзян-Уйгурский[c] авт.[/c] р-н, КНР[/i])[/m]
const {JSDOM} = require('jsdom');
const group = (str) => {
const {document} = new JSDOM(str.replace(/(\[|\])/g, (_, s) => ({
'[': '<',
']': '>'
})[s])).window;
return [...document.body.querySelectorAll('*')].reduce((acc, elem) => {
acc[elem.tagName] = [...elem.childNodes].reduce((str, elem) => {
return str + (elem.nodeType === document.TEXT_NODE ? elem.textContent : '');
}, '');
return acc;
}, {});
};
console.log(group('[m]Галифакс ([i]город в Канаде[/i])[/m]'));
console.log(group('[m][p]г.[/p] Хадалык ([i]Синьцзян-Уйгурский[c] авт.[/c] р-н, КНР[/i])[/m]'));