2016-06-11 77 views
0

我試圖通過使用正則表達式而不是常規替換來提高我的代碼的一部分,以獲得乾淨的字符串提交給Solr的客戶端。使用正則表達式改進這種遞歸搜索

String.prototype.replaceArray = function(find, replace) { 
     var replaceString = this; 
     for (var i = 0; i < find.length; i++) { 
      replaceString = replaceString.replace(find[i], replace[i]); 
     } 
     return replaceString; 
    }; 

var match = [ 
        '\\', 
        '+', 
        '-', 
        '&', 
        '|', 
        '!', 
        '(', 
        ')', 
        '{', 
        '}', 
        '[', 
        ']', 
        '^', 
        '~', 
        '*', 
        '?', 
        ':', 
        '"', 
        ';', 
        ' ' 
       ];   
       var replace = [ 
        '\\\\', 
        '\\+', 
        '\\-', 
        '\\&', 
        '\\|', 
        '\\!', 
        '\\(', 
        '\\)', 
        '\\{', 
        '\\}', 
        '\\[', 
        '\\]', 
        '\\^', 
        '\\~', 
        '\\*', 
        '\\?', 
        '\\:', 
        '\\"', 
        '\\;', 
        '\\ ' 
       ];      
       _.map(object, function (field) { 
        field.replaceArray(match, replace); 
       }); 

可能存在一種使用正則表達式的方法嗎?

我試圖取代

field.replaceArray(match, replace); 

這個

field.replace(/([\\+-&|!(){}[]^~*?:";])/g, '\\$1'); 

,但因爲我不明白足夠的正則表達式是如何工作:(

+0

這裏的遞歸在哪裏..? – Redu

回答

2

你需要它不工作可能跳過方括號,並在末尾加上連字符,因爲第二位表示範圍:

field.replace(/([\\+&|!(){}\[\]^~*?:"; -])/g, '\\$1'); 

regex tester

+0

非常感謝,這個正則表達式測試器真的很棒! – Toucouleur