问题描述
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 工具,那就不是简单的插值,还需要处理分析值的类型,进行转换来进行不同的插值处理。