[英]How to extract an array of column names ordered by parameter index from an PostgreSQL conditions string?
說我有這個字符串表示,PostgreSQL的查詢WHERE
條件:
(a > $3 OR a < $4 OR (b <= $1 AND b >= $4)) OR (c = $1 AND (c != $2 OR c <> $3)) OR (d @> $5 AND (d <@ $6 OR c && $6)) OR e || $7
我如何提取由名稱索引($ 1,$ 2,$ 3)與列名稱進行比較的列名稱(a,b,c)數組?
結果應為:
[ // comments display parameter indexes by which the array is ordered
b, //$1 $4
c, //$1 $2 $3 $6
a, //$3 $4
d, //$5 $6
e //$7
]
請注意,如果將第一個參數($ 1)進行多次比較,則數組中的第一項將只是首先解析的列名。
這是一組已知的運算符:
[ '<=', '>=', '!=', '<>', '@>', '<@', '&&', '||', '<', '>', '=' ]
以下解決方案應涵蓋您的情況
正則表達式: /((\\w) (?:<=|>=|!=|<>|@>|<@|&&|\\|\\||<|>|=) (\\$\\d))/g
這會將運算符和列參數分組,然后可以對其進行匯總
var str= "(a > $3 OR a < $4 OR (b <= $1 AND b >= $4)) OR (c = $1 AND (c != $2 OR c <> $3)) OR (d @> $5 AND (d <@ $6 OR c && $6)) OR e || $7" var regex = /((\\w) (?:<=|>=|!=|<>|@>|<@|&&|\\|\\||<|>|=) (\\$\\d))/g; var match; var result = {}; while (match = regex.exec(str)) { var column = match [2]; var parameter = match[3]; result[column] || (result[column] = []) result[column].push(parameter) } console.log(result)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.