Quería hacer una herramienta para analizar elementos atómicos a partir de una fórmula.
digamos que comencé con Ba(Co3Ti)2 + 3BrH20 Primero querría analizar cada compuesto en la fórmula, lo cual es bastante fácil con let regions = str.replace(/\s/g, '').split(/\+/g);
Ahora, para cada compuesto, quiero identificar cada elemento y su "cantidad" numérica, así que para el ejemplo anterior, para el primer compuesto, quiero una matriz como esta:
[ "Ba", [ "Co3", "Ti" ], "2" ]y si no es posible encontrar subcompuestos entre paréntesis, entonces podría trabajar con esto:
[ "Ba", "(Co3", "Ti)", "2" ]¿Es esto posible con expresiones regulares? Esto es lo que se me ocurrió en unos minutos..
let compounds = str.replace(/\s/g, '').split(/\+/g); for (var r = 0; r < compounds.length; ++r) { let elements = compounds[r] }Puedes usar
str.match(/\(?(?:[AZ][az]*\d*|\d+)\)?/g)Vea la demostración de expresiones regulares . Detalles :
\(? - un opcional ((?:[AZ][az]*\d*|\d+) - cualquiera de las dos opciones:[AZ][az]*\d* - una letra mayúscula, luego cero o más letras minúsculas y luego cero o más dígitos| - o\d+ - uno o más dígitos\)? - un opcional ) .Vea una demostración de JavaScript:
const str = 'Ba(Co3Ti)2'; const re = /\(?(?:[AZ][az]*\d*|\d+)\)?/g; let compounds = str.match(re); console.log(compounds);