2012-05-25 50 views
0

我想用反斜槓替換字符串中未轉義的斜槓。但奇怪的事情發生了:Javascript替換未轉義的斜槓

"\content\hs\gj\home.css".replace(/\\/gi,"/") 

返回「contenthsgjhome.css」。我明白,如果將其更改爲

"\\content\\hs\\gj\\home.css".replace(/\\/gi,"/")` 

然後,它會按預期工作,但因爲它只是由path.join("conetnt", "hs", "gj", "home.css")的NodeJS輸出我不能改變的字符串。

我該怎麼辦?

+0

你怎麼真的得到你的字符串?看看這篇文章,你的字符串應該是不可能的,如果你不用javascript自己生成它:http://stackoverflow.com/questions/2479309/javascript-and-backslashes-replace – snies

回答

6

它返回"contenthsgjhome.css"的原因是,您的字符串並沒有真正有任何反斜槓,因爲在所有的字符串文字單個反斜槓將被忽略,除非它們是有意義的逃生後面的字符(如"\\""\n" )。 "\c"作爲轉義沒有特殊含義,所以它被解釋爲"c"

"\content\hs\gj\home.css" 

結束了一樣:

"contenthsgjhome.css" 

所以沒有反斜槓爲.replace()找到。

(請注意,如果您在字面像"\\"一個字符串,它是字面語法的一部分做逃脫反斜槓只有一次解釋生成的字符串只有一個反斜槓"\"

或許,如果你能解釋你的意思是「這只是FS的產出」,有人可以提供更多的建議。當JSP/ASP/PHP/etc輸出JS代碼時這是一個常見問題 - 在JS解釋器看到它之前,需要在JSP/ASP/PHP/etc代碼中進行轉義。

+1

準確地說,你的字符串應該用doubleslashes:''\\ content \\ hs \\ gj \\ home.css'' – drinchev

+0

謝謝,字符串實際上來自nodejs path.join(「conetnt」,「hs」,「gj」,「home.css 「) – iNc0ming

+0

因此,它是在一個變量,而不是在字符串文字?請更新您的問題,以確切顯示您如何使用'path.join(「conetnt」,「hs」,「gj」,「home.css」)輸出。 ['path.join()'doco](http://nodejs.org/api/path.html#path_path_join_path1_path2)中的示例輸出似乎與正斜槓連接,而不是反斜槓。如果您在nodejs下運行代碼以生成發送到瀏覽器的輸出,則需要直接在nodejs代碼中進行轉義,而不是在瀏覽器中進行轉義。 – nnnnnn

0
yourstring.split(String.fromCharCode(92)).join('/')