【问题标题】:Quote not being replaced by escape character [duplicate]引号没有被转义字符替换[重复]
【发布时间】:2020-01-27 06:28:38
【问题描述】:

我正在尝试编写一个 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);

引号目前没有被转义字符替换。

【问题讨论】:

  • "\'" === "'".

标签: javascript html regex


【解决方案1】:

问题是你的

.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`\"`);

【讨论】:

    猜你喜欢
    • 2019-03-17
    • 2013-09-24
    • 1970-01-01
    • 2015-11-29
    • 2020-02-24
    • 2019-05-22
    • 2013-03-12
    • 1970-01-01
    • 2012-05-28
    相关资源
    最近更新 更多