我正在尝试编写一个 JavaScript RegEx,它可以正确地将转义字符添加到字符串中的所有单引号和双引号字符。例如,如果我有以下字符串:
"Hey, how's it going? You're really good at this!"
代码应该将该字符串转换为:
"Hey, how\'s it going? You\'re really good at this!"
下面是我的代码:
var testString = "Hey, how's it going? You're really good at this!";
testString = testString.replace(/'/g, '\'').replace(/"/g, '\"');
alert(testString);
引号目前未被转义字符替换。
问题是你的
.replace(/'/g, '\'')
.replace(/"/g, '\"');
替换字符串仍然只有一个字符:
const str1 = '\'';
const str2 = '\"';
console.log(str1, str2);
console.log(str1.length, str2.length);
\'
和
\"
在字符串文字中只表示不必要的转义字符:\'
不是转义序列(如\n
),所以它等同于'
.
在反斜杠旁边放置另一个反斜杠以指示文字反斜杠:
testString.replace(/'/g, '\\'').replace(/"/g, '\\"');
您还可以使用 String.raw
来避免输入两次反斜杠,但对于这么短的内容来说不值得这样做:
testString.replace(/'/g, String.raw`\'`).replace(/"/g, String.raw`\"`);