【问题标题】:Javascript .replace() of the character " with the characters \"Javascript .replace() 的字符 " 与字符 \"
【发布时间】:2015-03-16 18:15:56
【问题描述】:

我正在尝试将 JSON 字符串作为命令行参数从 Javascript 作为 node.js 子进程传递给 C# .exe。为了论证,我的 JSON 看起来像这样:

string jsonString = '{"name":"Tim"}'

将 this 作为 C# arg 传递的问题是,如果我希望在 C# 代码中解析它,则必须保留双引号。因此,我需要传递到 C# 命令行的内容看起来像这样,我在其中转义了双引号:

string jsonStringEscaped = '{\"name\":\"Tim\"}'

这样做的动机是它允许我在两种语言中保持一致的对象结构,这显然对我来说是非常可取的。

为了实现这一点,我尝试在将参数发送到 C# 之前使用 Javascript .replace() 方法,为此我使用了一个简单的正则表达式:

string jsonStringEscaped = jsonString.replace(/\"/g,"\\\"")

不幸的是,这会返回 '{\\"name\\":\\"Tim\\"}' 形式的东西,这对我来说毫无用处。

我已经尝试过这方面的变化:

string jsonStringEscaped = jsonString.replace(/\"/g,"\\ \"")
\\ returns '{\\ "name\\ ":\\ "Tim\\ "}'

string jsonStringEscaped = jsonString.replace(/\"/g,"\\\\")
\\ returns '{\\\\name\\\\:\\\\Tim\\\\}'

string jsonStringEscaped = jsonString.replace(/\"/g,"\\\")
\\ is invalid

string jsonStringEscaped = jsonString.replace(/\"/g,"\\\ ")
\\ returns '{\\ name\\ :\\ Tim\\ }'

我尝试过将第二个 .replace() 参数包含在单引号 '' 而不是双引号 "" 中的变体,但没有成功。

谁能告诉我我做错了什么?更好的是,任何人都可以提出一种更有效的方法来完成我想要实现的目标吗?

【问题讨论】:

  • 从命令行启动 c# 应用程序所需的结构是什么?听起来好像您正在尝试临时服务而没有任何服务的好处。
  • 你确定你对结果的解释是正确的,并且'\\'不只是'\'的显示形式吗?您的替换代码似乎正是您所需要的。
  • @Frax 非常感谢,我认为这就是原因。我花了很多时间来调试这个微不足道的问题。

标签: javascript c# json


【解决方案1】:

除非我误读了你,否则我认为你只是想转义一个不需要在你的正则表达式 (") 中转义的字符。

var jsonString = '{"name":"Tim"}'
var escaped = jsonString.replace(/"/g, '\\"');
// escaped == "{\"name\":\"Tim\"}"

【讨论】:

  • 也许我当时误读了他的问题。似乎他想达到他发布的格式 - 我的正则表达式会给他 - 但无法。他问道:“更好的是,任何人都可以提出一种更有效的方法来完成我想要实现的目标吗?”其中...答案是我在上面粘贴的正则表达式。
  • 单线作为 cmets 更好。它看起来像正确的代码;解释一下它的作用,你会很好。
猜你喜欢
  • 2020-12-06
  • 2011-02-26
  • 2015-10-11
  • 1970-01-01
  • 2017-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多