如何使用jquery将插入符号后的连续数字转换为上标?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用jquery将插入符号后的连续数字转换为上标?相关的知识,希望对你有一定的参考价值。
这个问题与How to convert numbers after caret to superscript with jquery有关,我得到了一个非常good answer。
现在问题,我需要扩展recent script | jsfiddle,以便将连续的数字考虑在内。
最近的脚本接受一个字符串,并检查它是否为插入符号。然后:
- 如果插入符号后面没有括号,则只标注下一个字符。
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]+$/)) { ... }
存储它检查这个字符,但我失败了:(
因此,如果今天有人觉得足够健康,我很乐意看到你的解决方案。
谢谢。
答案
Here you go, sir。我重构了一下使用内部循环而不是缓冲区数组,因为它有额外的缓冲条件。
// 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('');
}
以上是关于如何使用jquery将插入符号后的连续数字转换为上标?的主要内容,如果未能解决你的问题,请参考以下文章