Javascript 除[值]之外的正则表达式

Javascript 除[值]之外的正则表达式,javascript,regex,Javascript,Regex,我有一个字符串,想用mssqlFunctions对象中给定的其他字符串替换它 var mssqlFunctions = { DateDiff: "DATEDIFF", Abs: "ABS", y: 'year', m: 'minute' }; 我的字符串是:DateDiff(m,Abs(23)[Emy()]) 这是我用来替换字符串的代码 var

我有一个字符串,想用mssqlFunctions对象中给定的其他字符串替换它

var mssqlFunctions = {
                DateDiff: "DATEDIFF",
                Abs: "ABS",
                y: 'year',
                m: 'minute'
            };
我的字符串是:DateDiff(m,Abs(23)[Emy()])

这是我用来替换字符串的代码

var regularExpression = new RegExp(Object.keys(mssqlFunctions).join("|"),"gi");

formula = formula.replace(regularExpression, function(matched){
  return mssqlFunctions[matched];
});
因此它将输出为DATEDIFF(分钟,ABS(23)[Eminuteyear()])

但我不想替换[]中的字符串

所以我想要的输出是


DATEDIFF(minute,ABS(23)[Emy()])

您可以匹配并捕获方括号中的字符串,并检查组是否匹配。如果组匹配,匹配应该失败,您需要替换为整个匹配(将其放回)。否则,可以用修改后的值替换

使用

var formula=“DateDiff(m,Abs(23)[Emy()])”;
var mssqlFunctions={
DateDiff:“DateDiff”,
Abs:“Abs”,
y:'年',
m:‘分钟’
};
var regularExpression=newregexp(“(\\[^\\][]*])|”+Object.keys(mssqlFunctions).join(“|”)gi”);
公式=公式.replace(正则表达式,函数(匹配,组1){
返回组1?匹配:mssqlFunctions[匹配];
});

console.log(公式);//=>DATEDIFF(分钟,ABS(23)[Emy()])
不是预期的输出
DATEDIFF(分钟,ABS(23)[Emy()])
?你确定
()
应该消失吗?是的,为那个人感到抱歉,你让我很开心。不知道如何使用正则表达式。非常适合我,谢谢。