簡體   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