问题描述
js 替换,将 select * from ddd where id={{aaa}} and id={{xxxx}} 种的 {{aaa}} 和 {{xxx}} 替换成 111 和 222,其中aaa和xxx以及111和222都是用户输入的不确定,where 前面的 也是用户输入的 应该怎么操作?
根据数组下标的值如下:
[‘yrtyrt’, ‘fdgfdfdgfd’]
替换如下字符串里的内容:
‘select * from sss
where id={{aaa}}
and id={{xxxx}}
‘
期望结果:
‘select * from sss where id=yrtyrt and id=fdgfdfdgfd’
相关代码
你期待的结果是什么?实际看到的错误信息又是什么?

回答:
function format(pattern, paramObj) {
const regex = /\{\{(.*?)\}\}/g;
const segments = [];
let index = 0;
for (const m of pattern.matchAll(regex)) {
segments.push(pattern.slice(index, m.index));
segments.push(paramObj[m[1]] ?? "");
index += m.index + m[0].length;
}
return segments.join("");
}
const aaa = "hello";
const xxxx = "hi";
const r = format("select * from ddd where id={{aaa}} and id={{xxxx}}", { aaa, xxxx });
console.log(r);
虽然可以写出来,但是
- 这个 SQL 有可能是错的,因为
id=后面理论上来说应该是个数,或者带单引号的字符串。如果是用户输入,又没处理成数的话,比如id=abc,那就是 SQL 语法错误。 - 前端拼 SQL 是很奇怪的,除非你写 SQL 工具
- 如果是 SQL 工具,那就不是简单的插值,还需要处理分析值的类型,进行转换来进行不同的插值处理。