这个问题与如何使用jquery将插入符号后的数字转换为上标 https://stackoverflow.com/questions/14813023/how-to-convert-numbers-after-caret-to-superscript-with-jquery/14813395我在那里得到了一个非常好答案 https://stackoverflow.com/a/14813395/1066234.
现在有问题,我需要延长最近的脚本 | jsfiddle http://jsfiddle.net/MBXTG/这样它就会考虑连续的数字。
最近的脚本采用一个字符串,并检查它是否有护理人员。然后:
- 如果插入符号后面没有括号,则仅在下一个字符上添加上标。
x^2
变成x<sup>2</sup>
- 如果有左括号,则上标直到右括号。
x^(2y+1)
变成x<sup>2y+1</sup>
但是,我需要扩展 n°1,因为可能有一个数字持有几位数字甚至变量.
所以我们需要一个新的 n°1:
- 如果插入符号后面没有括号,则为上标所有连续的字符只要它们是数字或字符。以便
x^12a
变成x<sup>12a</sup>
我尝试实现它,包括一个变量afternext = input[ (i+1) ])
并通过检查这个字符if(afternext.match(/^[0-9a-zA-Z]+$/)) { ... }
存储它,但我失败了:(
因此,如果今天有人感觉身体足够健康,我很高兴看到您的解决方案。
谢谢。
给你,先生 http://jsfiddle.net/MBXTG/3/。我对其进行了一些重构,以使用内部循环而不是缓冲区数组,因为附加的缓冲条件有点混乱。
// transform carets, e.g. x^2 to x<sup>2</sup> and x^(2y) to x<sup>2y</sup>
function superify(input) {
if(!input) return input;
var output = [];
var alphanumeric = /^[a-z0-9]+$/i;
var i = 0;
var parens;
//outer loop for iterating string
while(i < input.length) {
var current = input[i++];
var next = input[i];
if(current === '^' && next && ((parens = (next === '(')) || next.match(alphanumeric))) {
var first = next;
//start super
output.push('<sup>');
if(!parens)
output.push(first);
//push chars to output until break or string end
while(i++ < input.length) {
current = input[i];
if(parens && current === ')')
break;
if(!parens && !current.match(alphanumeric))
break;
output.push(current);
}
output.push('</sup>');
if(!parens)
output.push(current);
i++;
}
else {
output.push(current);
}
}
return output.join('');
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)