所以,我从这样的JSON数组中提取了字符串:
Hg22+
CO32-
Al3Cl23+
这些数字必须是带有规则的上标或下标。它只是数字0-9,如果该数字后面有加号或减号,则需要是上标,这意味着我需要将字符串更改为<sup>3+</sup>
。所有其他数字,如果尚未上标,则需要下标。以下是我需要的几个例子:
C12H22O11 (s, sucrose)
= <sub>1</sub><sub>2</sub>H<sub>2</sub><sub>2</sub>O<sub>1</sub><sub>1</sub> (s, sucrose)
Al3Cl23+
= Al<sub>3</sub>Cl<sub>2</sub><sup>3+</sup>
Hg22+
= Hg<sub>2</sub><sup>2+</sup>
我能做到,但非常邋..我真的很乐意改变上面的字符串。如果有人可以帮忙,我会非常感激!
谢谢!
答案 0 :(得分:3)
易。
var result = input.replace(/\d([+-]?)/g,function(match,plus) {
var s = plus ? "sup" : "sub";
return "<"+s+">"+match+"</"+s+">";
});
完成。
答案 1 :(得分:1)
从@ Niet the Dark Absol的答案略微修改
var tests = ['Hg22+', 'CO32-', 'Al3Cl23+','C12H22O11 (s, sucrose)'];
function chemize(input) {
return input.replace(/\d([\+\-]?)/g,function(match,plus) {
var s = plus ? "sup" : "sub";
return "<"+s+">"+match+"</"+s+">";
});
}
for(var z in tests) {
var test = tests[z];
console.log('"' + test + '" --> ' + chemize(test) );
}
输出:
"Hg22+" --> Hg<sub>2</sub><sup>2+</sup>
"CO32-" --> CO<sub>3</sub><sup>2-</sup>
"Al3Cl23+" --> Al<sub>3</sub>Cl<sub>2</sub><sup>3+</sup>
"C12H22O11 (s, sucrose)" --> C<sub>1</sub><sub>2</sub>H<sub>2</sub><sub>2</sub>O<sub>1</sub><sub>1</sub> (s, sucrose)