Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将sum(某物)的出现次数改为something\u sum_Javascript_Jquery_Regex - Fatal编程技术网

Javascript 将sum(某物)的出现次数改为something\u sum

Javascript 将sum(某物)的出现次数改为something\u sum,javascript,jquery,regex,Javascript,Jquery,Regex,诚然,我对正则表达式和模式替换很糟糕,所以我想知道是否有人能帮我解决这个问题,因为我已经尝试了几个小时,正在拔头发 示例: sum(Sales) needs to be converted to Sales_sum max(Sales) needs to be converted to Sales_max min(Revenue) needs to be converted to Revenue_min 唯一可用的前缀词将是sum、min、max、avg、xcount——不确定这是否会对解决方

诚然,我对正则表达式和模式替换很糟糕,所以我想知道是否有人能帮我解决这个问题,因为我已经尝试了几个小时,正在拔头发

示例:

sum(Sales) needs to be converted to Sales_sum
max(Sales) needs to be converted to Sales_max
min(Revenue) needs to be converted to Revenue_min
唯一可用的前缀词将是
sum、min、max、avg、xcount
——不确定这是否会对解决方案产生影响

希望这是足够的信息来显示我在做什么。这可以通过RegEx实现吗


提前感谢。

有几种可能的方法,例如:

var str = "min(Revenue)";
var arr = str.match(/([^(]+)\(([^)]+)/);
var result = arr[2]+'_'+arr[1];
结果
则是
收入_min”

下面是一个更复杂的示例,它跟随您的注释,处理许多匹配项并将动词小写:

var str = "SUM(Sales) + MIN(Revenue)";
var result = str.replace(/\b([^()]+)\(([^()]+)\)/g, function(_,a,b){
   return b+'_'+a.toLowerCase()
});
结果:
“销售总额+收入最低值”

尝试:

var input   = 'sum(Sales)',
    matches = input.match(/^([^(]*)\(([^)]*)/),
    output  = matches[2] + '_' + matches[1];

console.log(output); // Sales_sum
此外:


将白名单用于前缀词列表:

output = input.replace(/\b(sum|min|max|avg|xcount)\((.*?)\)/gi,function(_,a,b) {
    return b.toLowerCase()+"_"+a;
});

添加了
\b
,一个单词边界。这可以防止类似“haxcount(xorz)”的内容变成“haxorz_xcount”

您可以使用
替换

'sum(Sales)'.replace(/(\w+)\((\w+)\)/, '$2_$1')

... 这并不复杂。。。将
/(sum | min | max | avg | xcount)\(.*)/g
替换为
“$2$1”
…所有这些都是相对的,因为我对Regex很糟糕:)这是满足我需求的最优雅的解决方案(尽管我仍然很欣赏每个人的答案)-有没有办法在这个Regex中把|之后的第二个单词改成小写?也就是说,SUM(Sales)会变成Sales_SUM而不是Sales_SUM。这很好,但主要问题是SUM(Sales)不会被捕获,如果是SUM(Sales),那么SUM(Sales)会变成Sales_SUM,应该是Sales_SUM-抱歉。在我的问题中,我应该这么说。这能进化到包括所有循环发生的事件吗?比如SUM(销售)+SUM(销售)。绝对是天才。非常感谢。第一个答案是否可以演变为包含所有循环发生的事件?例如SUM(销售)+SUM(销售)。
'sum(Sales)'.replace(/(\w+)\((\w+)\)/, '$2_$1')