我有一个包含反斜杠的字符串:
"{ \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)编写的库中获取此字符串。
正如我从答案和评论中理解的那样,没有办法在不改变库或包装器的情况下正确解析字符串......
谢谢大家。
答案 0 :(得分:5)
不,你的字符串不包含(文字)反斜杠。
\
是转义字符,\t
,\k
和\m
在解析时被视为转义序列 (和不是在印刷时,正如你似乎认为的那样)。它们甚至从未到达replace
,因为它们在运行时不再存在。此外,对于无法识别的序列(\k
和\m
),只会忽略反斜杠。
防止这种情况的唯一方法是在源代码中添加额外的反斜杠 :
"{ \\time 4/4 \\key c \\major d'4 }"
答案 1 :(得分:2)
您可以使用String.raw作为替代来保存包含斜杠的字符串。 对于他,您必须将字符串放在严重符号(`)之间,如下所示:
var path = String.raw`your\string\with\slash`;
这样您就可以保留斜线。
答案 2 :(得分:0)
有趣的是,如果您在HTML文本输入框中输入字符$$ \sum \theta $$
,则javascript会将它们拾取并传递给它们,甚至console.log也会将它们输出不变。
var TextSource = document.getElementById( "myHTMLTextInputBox" );
var labelStr = TextSource.value;
console.log ("Obtained text = ", labelStr);
同样,您可以像这样在HTML DIV的定义中键入相同的字符序列:-
<div id="anne" name="bob" class="carla" title ="tommy"> $$ \sum \theta $$ </div>
(我想知道如何通过解析来解释这些过程吗?)