2017-08-13 78 views
0

我想從Javascript中的GET字符串中提取子字符串以將它們傳遞給PostgreSQL上的查詢。 我已經嘗試過PostgreSQL全文搜索,但最終出現了問題,即全文搜索只允許前綴匹配(Already described here)。PostgreSQL多個子字符串搜索

所以我正在尋找使用帶有通配符的子串的數組的'ILIKE ALL(array)'。

SELECT *從包裹WHERE DOC ILIKE ALL(陣列[ '%substr1%', '%substr2%', '%substr3%']);

我把我的GET字符串分解成Javascript這樣。

var str =(GET()['search'])。split('+');

這給了我一個子串的數組。 如何在regEx中爲每個子字符串添加開頭和結尾的%? 還是有更好的方法來實現這個?

回答

0

在JavaScript中,你可以使用map爲:

var str = (GET()['search']).split('+').map(word => '%' + word + '%'); 

在ES5兼容代碼:

var str = (GET()['search']).split('+').map(function (word) { 
    return '%' + word + '%'; 
}); 
+0

就像一個魅力。我只需要將%編碼到%25並添加'as%27,這樣我的查詢就可以通過GET發送了。所以:'var str =(GET()['search'])。split('+')。map(function(word){ return'%27%25'+ word +'%25%27'; });'做這項工作。我的Where子句然後被調用通過:'where:「doc ilike all(array [」+ str +「])」,' – geom

+0

啊,是的,你實際上可以使用'return encodeURIComponent(「'%」+ word +「 %'「)',這樣你就可以將編碼保留爲JavaScript,如果它們出現在單詞本身中,它也會轉義特殊字符。雖然我注意到一個報價不被認爲是特殊的,所以我不確定爲什麼它會成爲你的情況的一個問題。 – trincot