我的字符串是这样的
var query = "@id >= 4 OR @id2 < 6 AND @id3 >= 5 AND @name = foo "
现在我想对这个字符串做的是反转每个“相等”测试。 将“>=”替换为“<”,将“<”替换为“>=”,将“=”替换为“!=”。
我想要的结果:
var reverseQuery = "@id < 4 OR @id2 >= 6 AND @id3 < 5 AND @name != foo "
我们不能使用:
reverseQuery = query.replace(/>=/g, "<").replace(/</g, ">=").etc
因为这样做的结果是
@id >= 4 OR @id2 >= 6 AND @id3 >= 5 AND @name != foo
对吗?那么如何很好地做到这一点呢?
谢谢,
最佳答案
将单个替换与确定替换的回调函数一起使用。
query = query.replace(/(<=?|>=?|=|<>|!=)/g, function(m){
switch(m) {
case '<': return '>=';
case '>': return '<=';
case '<=': return '>';
case '>=':return '<';
case '=': return '!=';
case '<>': return '=';
case '!=': return '=';
}
});
关于javascript - 字符串中棘手的多次替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11449638/