gpt4 book ai didi

javascript - 如何从 PostgreSQL 条件字符串中提取按参数索引排序的列名数组?

转载 作者:行者123 更新时间:2023-12-03 02:35:12 25 4
gpt4 key购买 nike

假设我有这个代表 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

如何提取列名数组(a、b、c),该数组将按与列名进行比较的参数索引($1、$2、$3)排序?

结果应该是:

[ // 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)

关于javascript - 如何从 PostgreSQL 条件字符串中提取按参数索引排序的列名数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48563645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com