2010-03-19 120 views
26

這裏是我的字符串:Javascript和反斜線替換

var str = "This is my \string"; 

這是我的代碼:

var replaced = str.replace("/\\/", "\\\\"); 

我不能讓我的輸出是:

"This is my \\string" 

我有嘗試了我能想到的正則表達式和替換值的每種組合。

任何幫助表示讚賞!

回答

29

該字符串不包含反斜槓,它包含\s轉義序列。

var str = "This is my \\string"; 

如果你想要一個正則表達式,你應該有一個正則表達式,而不是一個字符串。

var replaced = str.replace(/\\/, "\\\\"); 
+3

變種替換= str.replace(/ \\ /克, 「\\\\」); 不需要/ g全局標誌是必要的,但是如果你想要替換反斜槓的每一個實例,這就是你如何去做的。 – DaveH 2013-06-04 20:55:05

7

問題是,在你的第一行甚至沒有被識別。它認爲反斜槓將標記轉義序列,但\ s不是轉義字符,因此它被忽略。你的var str被解釋爲「這是我的字符串」。嘗試str.indexOf("\\") - 你會發現它是-1,因爲根本沒有反斜槓。如果你控制str的內容,按照David的說法 - 添加另一個\以逃離第一個。

+0

問題是我不控制價值。它實際上是一個我正在處理的窗口路徑(\ wp-content \ photos \ image123.jpg)。該字符串以「\ wp-content \ photos \ image123.jpg」的形式給出,但我無法做任何事情,因爲反斜槓消失了。我知道他們被解析爲轉義字符,但我不知道如何解決它。 – Frankie 2010-03-19 17:41:43

+1

要麼你得到破碎的JS(在這種情況下,你不能修復它),或者你得到了一些其他語言的字符串,並將其輸出到JS,而不首先逃脫特殊字符,在這種情況下,你必須修復它。 – Quentin 2010-03-19 17:43:39

+0

同意 - 轉義序列可以進入字符串的唯一方法是如果字符串是在javascript中構造的。如果它來自表單字段,ajax響應,查詢字符串等,它不應該需要轉義。當你說「字符串給我......」時 - 它是如何提供給你的? – Graza 2010-03-19 17:51:54

0

我沒有試過,但以下應該工作

var replaced = str.replace((new RegExp("\s"),"\\s"); 

基本上你不想替換「\」,要替換的「\ S」表示的字符轉義序列。

不幸的是你將需要的字母,每一個數字,符號等的每一個字母這樣做是爲了覆蓋所有基地

+0

''\ s「'是''s」',所以這也會得到其他的s字符。除非序列是一個控制字符,否則最後會在字符串中用字符「\」加前綴。 – Quentin 2010-03-19 20:31:05

28

年得到了好久了難倒所有的答案堅持認爲源字符串需要已經在其中跳過反斜槓......這並非總是如此。

這樣做..

var replaced = str.replace(String.fromCharCode(92),String.fromCharCode(92,92)); 
+1

爲了人類的利益起見這個答案,它只是拯救了我的一天:) – iShaalan 2015-12-05 18:05:49

2

使用此

str.replace(/(\s)/g,function($0){return $0==' '?' ':'\\s'}) 

str.replace(/ /g,'something').replace(/\s/g,'\\s').replace(/something/g,' '); 

'東西' 也可能是字符的組合,是不是在字符串

var str=' \s'; 
    str.replace(/\s/g,'\\s'); 
// return '\\s\\s' 
    str.replace(/ /g,'SpAcE').replace(/\s/g,'\\s').replace(/SpAcE/g,' '); 
// return ' \\s' 
1

如果你有多個實例或反斜槓:

str.split(String.fromCharCode(92)).join(String.fromCharCode(92,92))