2010-03-19 323 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))