我正在尝试编写一个 Dart 函数,将化学方程式中的数字转换为下标,但前提是它们前面有一个字母、另一个下标或右括号。
例如,给定输入:
2H2 + O2 -> 2H2O 我希望将第二次、第三次和第五次出现的数字 2 转换为下标,结果是:
2H2 + O2 -> 2H2O 同样,在 (H2O)3 等情况下,结果应为 (H2O)₃。我在实施和正确识别应该转换数字的条件方面遇到困难。
任何关于如何在 Dart 中实现这一目标的帮助或指导将不胜感激!
您可以使用后视来检查前面的字符是什么,并要求它是数字、字母或右括号:
(?<=[\w)])\d
。
replaceAllMapped
获取所有匹配项,并使用回调函数将匹配到的数字转换为对应的下标。由于下标字符的 Unicode 代码点处于从 8320 到 8329 的连续范围内,因此我们可以通过简单地向其代码点添加一个常量来转换每个数字:
final result = inputstr.replaceAllMapped(RegExp(r'(?<=[\w)])\d'), (match) {
return String.fromCharCode(match[0]!.codeUnitAt(0) + 8272);
});
数字 8272 是“0”(48) 和“₀”(8320) 之间的代码点距离。