Javascript正则expression式 – 从列出的函数中删除参数

我试图build立一个jQuery的插件,findExcel公式和评估它,目前使用jison作为parsing器和一些正则expression式的占位符replace,问题是我对这两个盲目,完整的代码目前在github

我想做的事:

说我有一个注册公式成员,它的function

var formula = { member:['MAX','MIN','AVG','SUM'], max:function(cell1,cell2){ ... //return the max } //.... and other function not listed } 

并有一个具有数据公式属性的HTML元素

 <div data-formula="MAX($A1,$A5)"></div> 

如果variables占位符$ A1作为列出的公式(MAX,MIN,SUM和AVG)的参数,它应该被replace为1.1(将A转换为1并与点连接),如果它在公式括号之外,则应该保留并将在稍后被replace(如果你可以帮助build立jison文件,使MAX()接受string,这将是伟大的:))

我目前的代码如下所示

 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); }); 

以上的正则expression式工作如预期,当它包含像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)) 

提前致谢

使用这个正则expression式:

 (SUM|AVG|MAX|MIN)\(([^(^)]*)\) 

IF($B1 > 3,SUM($B4,$B5),MIN($B1,$B3))SUM($B4,$B5)MIN($B1,$B3)匹配, $B4,$B5$B1,$B3

testing正则expression式

在你的代码中,修改这一行:

 var $formula_regex = new RegExp('('+formula.member.join('|')+')\(([^(^)]*)\)','g');