Javascript(或jQuery)字符串替换

时间:2015-01-31 00:20:56

标签: javascript jquery string replace

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

我能做到,但非常邋..我真的很乐意改变上面的字符串。如果有人可以帮忙,我会非常感激!

谢谢!

2 个答案:

答案 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)