如何在javascript中替换"with"

Dar*_*rcy 7 javascript replace

我有一个文本框,它将信息发布到服务器,它是JSON格式的.假设我想为值输入两个引号,JSON结构看起来像:

{
    "test": """"
}
Run Code Online (Sandbox Code Playgroud)

我需要它看起来像:

{
    "test": "\"\""
}
Run Code Online (Sandbox Code Playgroud)

所以它将遵循JSON标准,并且可以是可解析/可字符化的.

我试过用

 var val = myVal.replace('"', "\\\"");
Run Code Online (Sandbox Code Playgroud)

但这没用.val最终只有一个转义报价,所以\""任何帮助非常感谢!

Lig*_*ica 9

我的答案做了一些假设,因为我必须填写你问题中相当大的空白:

  • 用户将文本字符串输入到文本框中;
  • 您的脚本将读取文本框内容,并将这些内容用作其正在构建的JSON字符串中的一个项的 ;
  • 该脚本以某种方式将此生成的JSON字符串发送到服务器.

如果我做对了,那就继续......


基线代码

所以,对于一些占位符,你正在做:

function get_contents_of_textbox() {
   // Dummy data for example
   return 'My mum pushed and I said "Hello World"!';
}

function send_to_server(json_str) {
   // Dummy action: display JSON string
   console.log(json_str);
}

var myVal = get_contents_of_textbox();
var JSON  = '{ "test": "' + myVal + '" }';
send_to_server(JSON);
Run Code Online (Sandbox Code Playgroud)

现场演示,显示格式错误的JSON.


初步尝试

要确保它JSON有效,请转义它可能包含的任何引号和反斜杠.你已经放弃了:

myVal = myVal.replace('"', "\\\"");
Run Code Online (Sandbox Code Playgroud)

您尝试的结果是:

{ "test": "My mum pushed and I said \"Hello World"!" }
Run Code Online (Sandbox Code Playgroud)

只有第一个报价已被转义.这是因为默认情况下只替换搜索字符串的一个实例.

Mozilla文档:

要执行全局搜索和替换,请在正则表达式中包含g标志,或者如果第一个参数是字符串,请在flags参数中包含g.


工作尝试

不幸的是,flags参数是非标准的,所以让我们切换到正则表达式版本replace,并使用其中的/g开关:

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

(为了简洁,你会注意到我也缩小了替换字符串.)

结果:

{ "test": "My mum pushed and I said \"Hello World\"!" }
Run Code Online (Sandbox Code Playgroud)

现场演示.欢呼!


完整解决方案

让我们也添加逻辑来逃避反斜杠,我们最终得到这个:

function get_contents_of_textbox() {
   // Dummy data for example
   return 'My mum pushed [a back\\slash] and I said "Hello World"!';
}

function send_to_server(json_str) {
   // Dummy action: display JSON string
   console.log(json_str);
}

var myVal = get_contents_of_textbox();
myVal = myVal.replace(/\\/g, '\\\\'); // escape backslashes
myVal = myVal.replace(/"/g, '\\"');   // escape quotes

var JSON  = '{ "test": "' + myVal + '" }';
send_to_server(JSON);
Run Code Online (Sandbox Code Playgroud)

结果:

{ "test": "My mum pushed [a back\\slash] and I said \"Hello World\"!" }
Run Code Online (Sandbox Code Playgroud)

现场演示.


Mrc*_*ief 5

用这个

var val = myVal.replace(/"/g, '\\"');
Run Code Online (Sandbox Code Playgroud)