如何使用 JavaScript 将字符串中的双引号替换为转义字符双引号?

问题描述 投票:0回答:4

假设我有一个字符串变量(

var str
)如下-

老兄,他完全说“你摇滚!”

现在如果我要让它看起来像下面这样-

老兄,他完全说“你摇滚!”

如何使用 JavaScript

replace()
函数完成此操作?

str.replace("\"","\\"");
效果不太好。它给出了
unterminated string literal
错误。

现在,如果上面的句子要存储在 SQL 数据库中,例如在 MySQL 中作为 LONGTEXT(或任何其他 VARCHAR)数据类型,我还需要执行哪些字符串优化?

引号和逗号对查询字符串不太友好。我也希望就此事提出一些建议。

javascript string escaping
4个回答
79
投票

您需要为此使用全局正则表达式。试试这个方法:

str.replace(/"/g, '\\"');

在 JavaScript 中使用正则表达式中查看替换函数的正则表达式语法和选项。


9
投票

试试这个:

str.replace("\"", "\\\""); // (Escape backslashes and embedded double-quotes)

或者,使用单引号来引用您的搜索并替换字符串:

str.replace('"', '\\"');   // (Still need to escape the backslash)

正如 helmus 所指出的,如果传递给

.replace()
的第一个参数是一个字符串,它只会替换第一次出现的参数。要全局替换,您必须传递带有
g
(全局)标志的正则表达式:

str.replace(/"/g, "\\\"");
// or
str.replace(/"/g, '\\"');

但是为什么要在 JavaScript 中这样做呢?如果您有如下字符串文字,则可以使用这些转义字符:

var str = "Dude, he totally said that \"You Rock!\"";

但是这在字符串文字中是必要的。也就是说,如果您的 JavaScript 变量设置为用户在表单字段中键入的值,则不需要进行此转义。

关于在 SQL 数据库中存储此类字符串的问题,同样,如果您在 SQL 语句中嵌入字符串文字,则只需转义字符 - 请记住,在 SQL 中应用的转义字符不是(通常) ) 与 JavaScript 相同。您可以在服务器端执行任何与 SQL 相关的转义操作。


6
投票

其他答案适用于大多数字符串,但您最终可能会取消转义已经转义的双引号,这可能不是您想要的。

为了正确工作,您需要转义所有反斜杠,然后转义所有双引号,如下所示:

var test_str = '"first \\" middle \\" last "';
var result = test_str.replace(/\\/g, '\\\\').replace(/\"/g, '\\"');

根据您需要如何使用字符串以及涉及的其他转义字符,这可能仍然存在一些问题,但我认为它在大多数情况下可能会起作用。


0
投票
var str = 'Dude, he totally said that "You Rock!"';
var var1 = str.replace(/\"/g,"\\\"");
alert(var1);
© www.soinside.com 2019 - 2024. All rights reserved.