对于不是特别复杂的化学式和化学方程式来说,可以用一个或多个正则表达式来匹配。
一个化学式满足:
元素1 角标 元素2 角标 元素3 角标 ...
元素第一个字母必须大写,可以有第二个字母但必须小写。
角标可以是上(离子,+/-)也可以是下(分子中该元素原子数量),是一个正整数,如果是1则不写。
元素+角标可以嵌套括号。
匹配绝大多数化学式的正则表达式:
[A-Z][a-z]?\d*|\((?:[^()]*(?:\(.*\))?[^()]*)+\)\d+
在线DEMO
当然,对于特别复杂的化学式,比如:
(1) K0.85Ca3(Si2.15Al2.85)O11(SO4)0.7(CO3)0.3
(2) (Na,Ca,K)8(Si,Al)12O24(SO4,Cl,CO3)3·5H2O
可能就不行了。
对于离子式暂时还不行。
一个化学方程式满足:
数量 化学式 + 数量 化学式 + 数量 化学式 + ... =(/)(反应条件) 数量 化学式 + 数量 化学式 + 数量 化学式 + ...
数量是一个正整数,如果是1则不写,反应条件可以不写(默认是常温常压),方向是=/→(如果是可逆反应用←→),反应条件可以有加热、高温、光照、通电、高压、催化剂等。生成物可以有↑(反应物没有气体,生成物中液体生成气体)或者↓(生成物液体中生成不溶的沉淀)。
暂未找到匹配绝大多数化学方程式的正则表达式。
另外发一个在线的JavaScript化学方程式自动配平工具:点这里
参考:用正则表达式解析化学式 —— Stack Overflow以及怎样通过正则表达式来查找化学式 —— Stack Overflow