假设我有一个字符串变量(var str
),如下所示 -
老兄,他完全说“你摇滚!”
现在如果我要使它看起来如下 -
老兄,他完全说“你摇滚!”
如何使用JavaScript replace()
函数完成此操作?
str.replace("\"","\\"");
效果不佳。它会出现unterminated string literal
错误。
现在,如果将上述句子存储在SQL数据库中,比如在MySQL中将其作为 LONGTEXT (或任何其他 VARCHAR -ish)数据类型,那还有什么我需要执行字符串优化?引号和逗号对查询字符串不是很友好。我也很欣赏这方面的一些建议。
答案 0 :(得分:56)
你需要使用全局正则表达式,这样试试
str.replace(/"/g, '\\"');
在这里查看替换函数的正则表达式语法和选项:
答案 1 :(得分:6)
试试这个:
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!\"";
但这在字符串文字中只有 。也就是说,如果您的JS变量设置为用户在表单字段中键入的值,则不需要进行此转义。
关于将此类字符串存储在SQL数据库中的问题,如果要在SQL语句中嵌入字符串文字,则只需要转义字符 - 并记住在SQL中应用的转义字符不是(通常)与JS相同。你可以做任何与SQL相关的转义服务器端。
答案 2 :(得分:1)
其他答案适用于大多数字符串,但您最终可以解除已经转义的双引号,这可能不是您想要的。
要正常工作,您将需要转义所有反斜杠,然后转义所有双引号,如下所示:
var test_str = '"first \\" middle \\" last "';
var result = test_str.replace(/\\/g, '\\\\').replace(/\"/g, '\\"');
取决于你需要如何使用字符串,以及涉及的其他转义字符,这可能仍有一些问题,但我认为它可能在大多数情况下都有效。
答案 3 :(得分:0)
var str = 'Dude, he totally said that "You Rock!"';
var var1 = str.replace(/\"/g,"\\\"");
alert(var1);