我有一个字符串,并希望将其替换为mssqlFunctions对象中给出的其他字符串.
var mssqlFunctions = {
DateDiff: "DATEDIFF",
Abs: "ABS",
y: 'year',
m: 'minute'
};
Run Code Online (Sandbox Code Playgroud)
我的字符串是:DateDiff(m,Abs(23)[Emy()])
这是我替换String的代码
var regularExpression = new RegExp(Object.keys(mssqlFunctions).join("|"),"gi");
formula = formula.replace(regularExpression, function(matched){
return mssqlFunctions[matched];
});
Run Code Online (Sandbox Code Playgroud)
因此它将输出作为DATEDIFF(分钟,ABS(23)[Eminuteyear()])
但我不想替换[]中的字符串
所以我想要的输出是
DATEDIFF(分钟,ABS(23)[Emy()])
您可以匹配并捕获方括号之间的字符串,并检查该组是否匹配。如果组匹配,则匹配应该失败,并且您需要替换为整个匹配(将其放回去)。否则,您可以替换为修改后的值。
使用
var formula = "DateDiff(m, Abs(23)[Emy()])";
var mssqlFunctions = {
DateDiff: "DATEDIFF",
Abs: "ABS",
y: 'year',
m: 'minute'
};
var regularExpression = new RegExp("(\\[[^\\][]*])|" + Object.keys(mssqlFunctions).join("|"),"gi");
formula = formula.replace(regularExpression, function(matched, group1){
return group1 ? matched : mssqlFunctions[matched];
});
console.log(formula); // => DATEDIFF(minute, ABS(23)[Emy()])Run Code Online (Sandbox Code Playgroud)
这(\\[[^\\][]*])|是添加的正则表达式替代分支。它匹配并捕获
\\[- A[ [^\\][]*- 除[asnd之外的 0+ 个字符]]- 一个]字符。该matched变量代表整场比赛,group1代表第 1 组比赛。该return group1 ? matched : mssqlFunctions[matched];部分检查是否group1匹配,如果是, matched则用于替换匹配项,否则mssqlFunctions[matched]。
如果您想知道为什么使用双反斜杠,请参阅为什么正则表达式构造函数需要双转义?。
| 归档时间: |
|
| 查看次数: |
40 次 |
| 最近记录: |