JSFiddle - React, Tailwind, and code Playground

HTML

<pre id="out"></pre>

JavaScript

function f(i){function g(a,b,c){b=b.replace(/[[(]([^[(\])]+?)[\])](\d*)/g,g).replace(/([A-Z][a-z]?)(\d*)/g,function(x,y,z){return y+((z||1)*(c||1))});return(b.search(/[[(]/)<0)?b:g(0,b)}return JSON.stringify(g(0,i).split(/(\d+)/).reduce(function(q,r,s,t){(s%2)&&(q[t[s-1]]=+r+(q[t[s-1]]||0));return q},{})).replace(/["{}]/g,'').replace(/:/g,': ').replace(/,/g,'\n')}

arr=['Ba(PO3)2','C13H18O2','[C2H5]2NH','(CH3)3COOC(CH3)3','Mg2Al(AlSiO5)(OH)4','Mn(CHO2)2(H2O)2','K4[ON[SO3]2]2','Co3(Fe(CN)6)2'];
arr.forEach(function(i) {
  document.getElementById('out').innerHTML = document.getElementById('out').innerHTML + 'Input:\n  '+i+'\n\n'+f(i) + '\n----------\n';
});