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')