Excel の式を見つけて評価する jquery プラグインを構築しようとしています。現在、パーサーとしてjisonを使用し、プレースホルダーの置換にいくつかの正規表現を使用しています。
私がしたいこと:
登録された数式メンバーがあり、それが関数であるとします
var formula = {
member:['MAX','MIN','AVG','SUM'],
max:function(cell1,cell2){
...
//return the max
}
//.... and other function not listed
}
data-formula 属性を持つ HTML 要素を持っている
<div data-formula="MAX($A1,$A5)"></div>
変数プレースホルダー $A1 がリストされた数式 (MAX、MIN、SUM、および AVG) のパラメーターとして機能する場合は、1.1 に置き換えて (A を 1 に変換し、ドットで連結する)、数式ブラケットの外にある場合はそのままにしておく必要があります。後で置き換えられます(MAX()が文字列を受け入れるようにするjisonファイルの作成を手伝っていただければ、それは素晴らしいことです:))
私の現在のコードは以下のようになります
var $equation = '';
var $formula_regex = new RegExp('['+formula.member.join('|')+']+\(([^]+)\)','g');
//should be [SUM|AVG|MAX|MIN]+\(([^]+)\)
//this.data[$key].formula contains the string formula
$equation = this.data[$key].formula.replace($formula_regex,function($range){
$range = $range.replace(/\$\w+/g, function($key) {
$key = $key.replace('$','');
//utility.translaceCell will convert B23 to 2.23, C2 to 3.2 etc
$key = utility.translateCell($key,'string');
return $key;
});
return($range);
});
MAX($B1,$B3) のような単一の数式が含まれている場合、上記の正規表現は期待どおりに機能します
MAX($B1,$B3)
//translated to MAX(2.1,2.3)
より複雑な数式が含まれている場合は機能しません
IF($B1 > 3,SUM($B1,$B3),MIN($B1,$B3))
//translated to IF(2.1 > 3,SUM(2.1,2.3),MIN(2.1,2.3))
//expected IF($B1 > 3,SUM(2.1,2.3),MIN(2.1,2.3))
前もって感謝します