2011-06-20 120 views
11

我從遺留系統中的javascript變量與正在添加到反斜槓正斜槓:使用JavaScript將反斜槓轉換爲正斜槓無法正常工作?

'/46\465531_Thumbnail.jpg'

,我想轉換成這樣:

'/46/465531_Thumbnail.jpg'

無法解決遺留系統上的問題。

這裏是我在IE8瀏覽器中運行的命令:

javascript:alert("/46\465531_Thumbnail.jpg".replace(/\\/g,"/")); 

爲響應我得到:

--------------------------- 
Message from webpage 
--------------------------- 
/46&5531_Thumbnail.jpg 
--------------------------- 
OK 
--------------------------- 

其實我只是想被翻譯爲'/46/465531_Thumbnail.jpg'

什麼是錯的?

回答

22

您需要在您的字符串常量反斜槓加倍:

alert("/46\\465531_Thumbnail.jpg".replace(/\\/g,"/")); 

如果你的遺留系統實際上是與嵌入式的,未引用(即不加倍)反斜槓喜歡你的網頁建立JavaScript字符串常量那麼,它已經壞了,你會遇到問題。但是,如果你通過XML或JSON或其他類型的Ajax調用來獲取字符串,那麼你的代碼看起來很好。

+0

的確我明白這一點。問題是我無法操作字符串,所以我無法手動修改單個反斜槓並放置雙反斜槓。我試圖做這個'var test = escape(「/ 46 \ 465531_Thumbnail.jpg」); alert(teste.replace(「%26」,'/'));' –

+1

字符串究竟是如何進入頁面的?如果頁面上有由後端代碼動態創建的JavaScript代碼,並且*不*使用「\\」,那麼您基本上已經沉沒;生成的代碼很簡單。你將無法可靠地修復它,因爲你不能從一個「好」字符中分辨出反斜線的結果。 – Pointy

+1

的確,解決方案是修復混亂反斜槓的後端代碼。不可能僅使用JavaScript來修復它。 –

4

它實際上將\46解釋爲字符&的轉義碼序列。如果你要硬編碼字符串,你需要躲避\

alert("/46\\465531_Thumbnail.jpg".replace(/\\/g,"/")); 
      ^^ change \ to \\ 

樣品:http://jsfiddle.net/6QWE9/

0

沒有錯取代。輸入錯誤。

javascript:alert("/46\\465531_Thumbnail.jpg".replace(/\\/g,"/")); 
        ^
        \---------------- need to escape this! 
1

替換零件不是問題,它是字符串本身。您的字符串:

"/46\465531_Thumbnail.jpg" 

不是/46\465531。相反,反斜槓是作爲轉義字符。您需要將其更改爲:

javascript:alert("/46\\465531_Thumbnail.jpg".replace(/\\/g,"/")); 

即,用反斜槓轉義反斜槓。

相關問題