繁体   English   中英

使用字符串和模板文字连接的转义字符串

[英]Escape string for concatentaion with string and template literals

我需要将不受信任的*数据连接到 javascript 字符串中,但我需要它适用于所有类型的字符串(单引号、双引号或反引号) 理想情况下,我需要它同时适用于多种字符串类型

我可以使用字符串替换,但这通常是个坏主意。

我使用的是 JSON.stringify,但这只会转义双引号,而不是单引号或反引号。

我发现的其他答案一次只处理 escaping 一种类型的报价(而且从不反引号)。

我需要的一个例子:

untrustedData = 'a String with \'single quotes\', \"double quotes\" and \`backticks\` in it';
const someJS = `console.log(\`the thing is "${escapingFunctionHere(untrustedString)}"\`)`

someJS将被传递给new Function

* NB 在我的上下文中,这里的“不受信任”并不意味着潜在的恶意,但它确实需要处理引号、转义等。

我正在动态构建 javascript 代码,构建的代码不会以任何方式面向 Web。 事实上,我很可能是唯一一个会直接或间接使用这个工具的人。

我很高兴接受最小的相关风险

其他人注意:在做这种事情之前,请确保您了解风险。

对于那些感兴趣的人,我正在编写一个解析器创建器。 给定一个输入的 ebnf 语法文件,它将 output 一个 JS class 可用于解析事物。 我真的需要 output 代码在这里。

如果您需要做的只是转义单引号' 、双引号"和反引号` ,那么使用replace前置反斜杠\就足够了:

untrustedData.replace(/['"`]/g, '\\$&')

 const untrustedData = 'I \'am\' "a `string`"'; console.log(untrustedData); const escapedData = untrustedData.replace(/['"`]/g, '\\$&'); console.log(escapedData);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM