javascript
  • regex
  • string
  • 2012-07-12 78 views 3 likes 
    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 
    

    ,對嗎?那麼如何很好地做到這一點?

    謝謝,

    回答

    6

    使用與確定替換的回調函數的單個替換。

    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/

    相關問題