如何使用javascript将字符串中的escape-char双引号替换为双引号?

Sam*_*pta 35 javascript string escaping

假设我有一个字符串变量(var str)如下 -

老兄,他完全说"你摇滚!"

现在如果我要让它看起来如下 -

老兄,他完全说"你摇滚!"

如何使用JavaScript replace()函数完成此操作?

str.replace("\"","\\"");工作得不好.它给出了unterminated string literal错误.

现在,如果将上述句子存储在SQL数据库中,比如在MySQL中作为LONGTEXT(或任何其他VARCHAR -ish)数据类型,我需要执行哪些其他字符串优化?引号和逗号对查询字符串不是很友好.我也很欣赏这方面的一些建议.

Wil*_*eer 58

您需要为此使用全局正则表达式,请尝试这种方式

str.replace(/"/g, '\\"');
Run Code Online (Sandbox Code Playgroud)

在这里查看替换函数的正则表达式语法和选项:

http://www.regular-expressions.info/javascript.html


nnn*_*nnn 6

试试这个:

str.replace("\"","\\\""); // (escape backslashes and embedded double-quotes)
Run Code Online (Sandbox Code Playgroud)

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

str.replace('"','\\"');   // (still need to escape the backslash)
Run Code Online (Sandbox Code Playgroud)

更新:正如helmus所指出的,如果传递给的第一个参数.replace()是一个字符串,它将只替换第一个匹配项.要全局替换,您必须使用g(全局)标志传递正则表达式:

str.replace(/"/g,"\\\"");
// or
str.replace(/"/g,'\\"');
Run Code Online (Sandbox Code Playgroud)

但是你为什么要用JavaScript做这个呢?如果您有一个字符串文字,可以使用这些转义字符:

var str = "Dude, he totally said that \"You Rock!\"";
Run Code Online (Sandbox Code Playgroud)

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

关于将此类字符串存储在SQL数据库中的问题,如果要在SQL语句中嵌入字符串文字,则只需要转义字符 - 并记住在SQL中应用的转义字符不是(通常)和JS一样.你可以做任何与SQL相关的转义服务器端.


小智 6

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

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

var test_str = '"first \\" middle \\" last "';
var result = test_str.replace(/\\/g, '\\\\').replace(/\"/g, '\\"');
Run Code Online (Sandbox Code Playgroud)

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