2017-08-13 94 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