我有一个包含反斜杠的字符串:
"{ \time 4/4 \key c \major d'4 }"
当我尝试在nodejs child_process中传递它或只是在console.log中传递它时,反斜杠被删除:
console.log("{ \time 4/4 \key c \major d'4 }");
// "{ ime 4/4 key c major d'4 }"
我已经尝试了所有可以找到的东西,例如.replace(/\\/g, '\\')
或JSON.stringify
,但似乎没有任何效果。
字符串是动态构造的,因此我无法手动转义它。
有任何想法吗?
评论后更新:
我使用python-mingus从python(node-python)编写的库中获取此字符串。
据我从答案和注释中理解,没有办法在不改变库或包装器的情况下正确解析字符串......
谢谢你们。
不,您的字符串不包含(文字)反斜杠。
\
是一个转义字符,\t
,\k
和\m
在解析时被视为转义序列(而不是在打印时,正如您所想的那样)。他们甚至都没有到达你的replace
,因为它们在运行时不再存在。此外,对于无法识别的序列(\k
和\m
),反斜杠被简单地忽略。
防止这种情况的唯一方法是在源代码中添加一个额外的反斜杠:
"{ \\time 4/4 \\key c \\major d'4 }"
您可以使用String.raw作为保存包含斜杠的字符串的替代方法;对他来说,你必须把你的字符串放在严重的符号(`)之间,如下所示:
var path = String.raw`your\string\with\slash`;
这样你就可以保留斜线。