2015-05-26 33 views
1

我有一個包含反斜槓的字符串:保留所有反斜槓在字符串

"{ \time 4/4 \key c \major d'4 }" 

當我嘗試將它傳遞一個child_process的NodeJS或只是CONSOLE.LOG它, 反斜槓被刪除:

console.log("{ \time 4/4 \key c \major d'4 }"); 
// "{ ime 4/4 key c major d'4 }" 

我嘗試了所有的東西,我發現,如.replace(/\\/g, '\\')JSON.stringify,但似乎沒有任何工作。

該字符串是動態構建的,所以我無法手動將其轉義。

任何想法?評論後


更新:

我正在使用node-python用Python編寫的(python-mingus)庫此字符串。

當我從答案和註釋理解,沒有辦法正確解析字符串,而不會改變任何圖書館或包裝...

謝謝大家。

+2

' 「{\\時間4/4 \\ C鍵\\主要D'4}」 '工作正常。在將數據放入JavaScript之前,您需要轉義*。你從哪裏得到它? – h2ooooooo

+2

「動態構建」到底如何,以及爲什麼是斜線?如果它是一個字符串文字,則斜槓可能被解析器刪除。 – adeneo

+0

雙字符字符串文字「\ m」僅表示一個字符的字符串值。 JavaScript只能處理字符串值,而不能處理字符串文字。你也可以要求在數字文字'10e2'中保留'e'。你不能;該文字表示值「1000」,並且該值沒有「e」。類似地,文字'\ m'表示值'm',並且該值沒有反斜槓。 – apsillers

回答

5

不,您的字符串不包含(文字)反斜槓。

\是轉義字符,並\t\k\m在解析的時間視爲轉義序列(而不是在印刷的時候,你似乎認爲)。他們甚至從來沒有達到你的replace,因爲它們在運行時不再存在。另外,對於無法識別的序列(\k\m),簡單地忽略反斜線。

防止的唯一辦法是在源代碼添加額外的反斜線

"{ \\time 4/4 \\key c \\major d'4 }"