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 に答える