Javascript(或jQuery)字符串替换

Javascript (or jQuery) string replacement

所以,我从 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>

我会,但是很马虎。我真的很愿意接受一种像上面那样更改字符串的好方法。如果有人能提供帮助,我将不胜感激!

谢谢!

简单。

var result = input.replace(/\d([+-]?)/g,function(match,plus) {
    var s = plus ? "sup" : "sub";
    return "<"+s+">"+match+"</"+s+">";
});

完成。

根据@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)