[英]How to escape nested single quotes inside back tick or back quote
假設我們在 ES6 中有以下模板文字。
`'{"0": "It's Friday today"}'`
我們如何轉義單詞It's中的單引號
另外,假設我們有以下模板文字:
`'{"0": "Thursday\nFriday"}'`
我們如何轉義上面的\n
。
你不必轉義它們中的任何一個,除非你想將模板文字的內容用作在某些時候用單引號引用的字符串文字。 這看起來真的很可疑:永遠不要手動創建 JSON 字符串(如果你這樣做,不要將它包裝在模板文字中的字符串文字中:.-)):但是如果你想在模板中定義該字符串文字文字 這里是如何在字符串文字級別執行 escaping :
要轉義模板將定義的字符串文字中的'
in It's
,您需要在其前面放置一個反斜杠。 但是因為反斜杠是模板文字中的轉義符,所以您需要對反斜杠進行轉義,這樣它就不會被模板文字使用,並且稍后在評估字符串文字時使用。 所以:
// Define the template literal: const s1 = `'{"0": "It\\'s Friday today"}'`; // Escaped backslash −^^ console.log(s1); // Evaluate the single-quoted string literal it defined: const s2 = eval("(" + s1 + ")"); console.log(s2); // Since that defined a string containing JSON, let's parse it: const obj = JSON.parse(s2); console.log(obj[0]);
在帶有\n
的第二個示例中,該\n
轉義序列在模板文字級別被使用,這意味着模板文字包含一個換行符。 但是從模板文字的角度來看,您不希望它成為換行符,因此您...將其轉義: \\n
。 現在它不再是模板文字的換行符,而是單引號字符串文字的換行符。 現在It's
和上面一樣:如果你不想讓單引號字符串文字消耗\n
esape 序列,你需要轉義它。 這意味着你最終得到\\\\n
:
// Define the template literal: // 1st escaped backslash −−−vv const s1 = `'{"0": "Thursday\\\\nFriday"}'`; // 2nd escaped backslash −−−−−^^ console.log(s1); // Evaluate the single-quoted string literal it defined: const s2 = eval("(" + s1 + ")"); console.log(s2); // Since that defined a string containing JSON, let's parse it: const obj = JSON.parse(s2); console.log(obj[0]);
1: 使用 \ '{"0": "It\'s Friday today"}'
2: 再次使用 \ '{"0": "Thursday\\nFriday"}'
我認為使用反引號是錯誤的,你可以這樣寫:
'\'{"0": "It\'s Friday today"}\''
'\'{"0": "Thursday\nFriday"}\''
無論如何,我認為這的整個目的過於復雜,如果您只想創建一個 json,只需創建一個 object,然后將其轉換為 json:
var obj1 = {0: "It's Friday today"};
var obj2 = {0: "Thursday\nFriday"};
var json1 = JSON.stringify(obj1);
var json2 = JSON.stringify(obj2);
var final1 = "'" + json1 + "'";
var final2 = "'" + json2 + "'";
這種方式更容易,也不太可能出現語法錯誤。
希望能幫助到你。
默認情況下,您不必轉義它們。
如果你想稍后解析它,你可以使用模板標簽 function。
模板標記函數接收未轉義的字符串以允許進一步處理。
例如, String.raw
標簽 function 返回一個字符串而不解析額外的轉義:
console.log(String.raw `'{"0": "It\'s Friday today"}'`) // A single \ will do it ---^-----v console.log(String.raw `'{"0": "Thursday\nFriday"}'`)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.