2013-02-12 35 views
2

这个问题与How to convert numbers after caret to superscript with jquery有关,我得到了一个非常good answer如何将插入后的连续数字转换为使用jquery的上标?

问题现在,我需要延长recent script | jsfiddle,以便将连续的数字考虑在内。

最近的脚本需要一个字符串,并检查它是否有插入符号。然后:

  1. 如果脱字符后面没有括号,只能标出下一个字符。 x^2变为x<sup>2</sup>
  2. 如果有一个左括号,则直到右括号为止。 x^(2y+1)变得x<sup>2y+1</sup>

然而,我需要N°1延伸因为可能有一些保持几个数字甚至变量

因此,我们需要一个新的N°1:

  1. 如果在插入符号后面没有支架,标所有连续的字符,只要是数字或字符。这样x^12a成为x<sup>12a</sup>

我试图实现它,包括可变afternext = input[ (i+1) ])并检查该字符由if(afternext.match(/^[0-9a-zA-Z]+$/)) { ... }存储它,但我失败了:(

所以,如果有人感觉适合今天没带够,我很高兴看到您对此的解决方案。

谢谢。

回答

2

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(''); 
} 
+0

太棒了!非常感谢你帮助我如此快速,就像头痛和流泪一样,我有点无法编程......伟大的代码,证明了pro + //你的代码也会帮助许多其他人。 – 2013-02-12 15:34:07

+0

@EchtEinfachTV,不客气。只是一个有趣的小分心之间我自己的蹩脚问题:) – jevakallio 2013-02-12 15:38:46

+0

4年10个月后,这个很好的答案代码广泛用于我们的数学论坛https://www.mathelounge.de overfy头条新闻和内容。它效果很好。唯一的问题是:当高级主持人内部有人时,它会被打破。见http://jsfiddle.net/MBXTG/5/ – 2017-12-19 08:15:44

相关问题