我想制作一个工具来解析公式中的原子元素。
因此,假设我从Ba(Co3Ti)2 + 3BrH20开始,我首先要解析公式中的每个化合物,这在let regions = str.replace(/\s/g, '').split(/\+/g);中非常容易
现在,对于每个化合物,我想要标识每个元素及其数值“above”,因此对于上面的例子,对于第一个化合物,Id需要这样的数组:
[
"Ba",
[
"Co3",
"Ti"
],
"2"
]如果不可能在括号内找到子化合物,那么我可以这样做:
[
"Ba",
"(Co3",
"Ti)",
"2"
]这和regex有可能吗?这就是我几分钟后想出来的..。
let compounds = str.replace(/\s/g, '').split(/\+/g);
for (var r = 0; r < compounds.length; ++r) {
let elements = compounds[r]
}发布于 2022-01-06 18:34:30
您可以使用
str.match(/\(?(?:[A-Z][a-z]*\d*|\d+)\)?/g)见regex演示。详细信息
\(? -一个可选的((?:[A-Z][a-z]*\d*|\d+) -两个选项之一:[A-Z][a-z]*\d* -大写字母,然后是零或多个小写字母,然后是零或多个数字。| -或\d+ -一个或多个数字\)? -一个可选的)。请参阅JavaScript演示:
const str = 'Ba(Co3Ti)2';
const re = /\(?(?:[A-Z][a-z]*\d*|\d+)\)?/g;
let compounds = str.match(re);
console.log(compounds);
https://stackoverflow.com/questions/70611851
复制相似问题