2

この質問はHow to convert numbers after caret to superscript with jquery where I got a very good answerに関連しています。

問題は今、最近のスクリプトを拡張する必要があります | 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]+$/)) { ... }が、失敗しました:(

今日、誰かが十分にフィットしていると感じたら、それに対するあなたの解決策を喜んで見ていきます.

ありがとうございました。

4

1 に答える 1

2

どうぞ、サー。追加のバッファリング条件で少し面倒になったので、バッファ配列の代わりに内部ループを使用するように少しリファクタリングしました。

// 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('');
}
于 2013-02-12T15:12:31.163 に答える