3

我的字符串类似于

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 

正确的 ?那么如何很好地做到这一点呢?

谢谢,

4

1 回答 1

5

将单个替换与确定替换的回调函数一起使用。

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

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

于 2012-07-12T10:15:28.110 回答