gpt4 book ai didi

Javascript Regex - 从列出的函数中删除参数

转载 作者:行者123 更新时间:2023-11-28 02:13:25 24 4
gpt4 key购买 nike

我正在尝试构建一个 jquery 插件来定位 Excel 公式并对其进行评估,目前使用 jison作为解析器和一些用于占位符替换的正则表达式,问题是我对这两个一无所知,目前完整的代码位于 github

我想做的事:

假设我有一个注册的公式成员及其功能

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 并与点连接),如果它在公式括号之外,则将其替换为 1.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))

提前致谢

最佳答案

使用这个正则表达式:

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

使用 IF($B1 > 3,SUM($B4,$B5),MIN($B1,$B3)) 将匹配 SUM($B4,$B5), MIN($B1,$B3) 匹配的组为 $B4,$B5, $B1,$B3

regexpal 上测试

在您的代码中,修改此行:

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

关于Javascript Regex - 从列出的函数中删除参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16746061/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com