棘手的多次替换字符串

Luc*_*cas 3 javascript regex string

我的字符串是这样的

var query = "@id >= 4 OR @id2 < 6 AND @id3 >= 5 AND @name = foo "
Run Code Online (Sandbox Code Playgroud)

现在我想用这个字符串来反转每个"相等"测试.将'> ='替换为'<','<'by'> =','='替换'!='.

我想要的结果:

var reverseQuery = "@id < 4 OR @id2 >= 6 AND @id3 < 5 AND @name != foo "
Run Code Online (Sandbox Code Playgroud)

我们不能使用:

reverseQuery = query.replace(/>=/g, "<").replace(/</g, ">=").etc
Run Code Online (Sandbox Code Playgroud)

因为这样的结果会是

@id >= 4 OR @id2 >= 6 AND @id3 >= 5 AND @name != foo 
Run Code Online (Sandbox Code Playgroud)

对 ?那么如何做得很好呢?

谢谢,

Guf*_*ffa 5

使用单个替换与确定替换的回调函数.

query = query.replace(/(<=?|>=?|=|<>|!=)/g, function(m){
  switch(m) {
    case '<': return '>=';
    case '>': return '<=';
    case '<=': return '>';
    case '>=':return '<';
    case '=': return '!=';
    case '<>': return '=';
    case '!=': return '=';
  }
});
Run Code Online (Sandbox Code Playgroud)

演示:http://jsfiddle.net/Guffa/s2xj5/