棘手的多次替换字符串

时间:2012-07-12 10:12:01

标签: javascript regex string

我的字符串类似于

var query = "@id >= 4 OR @id2 < 6 AND @id3 >= 5 AND @name = foo "

现在我想用这个字符串来反转每个“相等”测试。 将'&gt; ='替换为'&lt;' ,'&lt;'通过'&gt; ='和'='by'!='。

我想要的结果:

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 

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

谢谢,

1 个答案:

答案 0 :(得分: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/