52

这是我的字符串:

var str = "This is my \string";

这是我的代码:

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

我不能让我的输出是:

"This is my \\string"

对于正则表达式和替换值,我已经尝试了所有我能想到的组合。

任何帮助表示赞赏!

4

8 回答 8

48

多年来一直为此感到困惑,所有答案都坚持认为源字符串需要已经在其中转义了反斜杠……但情况并非总是如此。

做这个 ..

var replaced = str.replace(String.fromCharCode(92),String.fromCharCode(92,92));
于 2014-03-25T05:03:02.803 回答
46

该字符串不包含反斜杠,它包含\s转义序列。

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

如果你想要一个正则表达式,你应该有一个正则表达式,而不是一个字符串。

var replaced = str.replace(/\\/, "\\\\");
于 2010-03-19T17:29:41.017 回答
13

问题是您的第一行中的 \ 甚至无法识别。它认为反斜杠将标记转义序列,但 \s 不是转义字符,因此被忽略。您的 var str 被解释为“这是我的字符串”。试试str.indexOf("\\")- 你会发现它是 -1,因为根本没有反斜杠。如果您控制 str 的内容,请按照 David 所说的操作 - 添加另一个 \ 以转义第一个。

于 2010-03-19T17:33:14.673 回答
5

如果您有多个实例或反斜杠:

str.split(String.fromCharCode(92)).join(String.fromCharCode(92,92))
于 2016-09-26T18:34:27.177 回答
3

var a = String.raw`This is my \string`.replace(/\\/g,"\\\\");
console.log(a);

结果:

This is my \\string
于 2021-04-12T21:36:35.850 回答
1

用这个

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

或者

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

'something' 它可能是不在字符串中的字符组合

var str=' \s';  
  str.replace(/\s/g,'\\s'); 
// return '\\s\\s'   
  str.replace(/ /g,'SpAcE').replace(/\s/g,'\\s').replace(/SpAcE/g,' ');
// return ' \\s' 
于 2015-10-17T14:28:32.910 回答
-1

如果用例是替换函数的 toString 中的某些值,并将字符串转换回有效函数。

var exFnStr1 = exFn.toString();

var exFnStr = "";
var quoteStarted = false;
for(i = 0; i < exFnStr1.length; i++) {
    var iChar = exFnStr1.charAt(i);
    var oChar = exFnStr1.charAt(i);
    var currentCharCode = exFnStr1.charCodeAt(i);
    if(quoteStarted) {
        if(currentCharCode === 9) oChar = "tabChar";
        if(currentCharCode === 10) oChar = "newlineChar";
    }
    //console.log(iChar+"->"+currentCharCode+"->"+oChar)
    exFnStr += oChar;

    if(currentCharCode === 34) {
        if(quoteStarted) quoteStarted = false;
        else quoteStarted = true;
    }
}
console.log(exFnStr);

//TODO - replace values in the string

exFn = new Function('return ' + exFnStr)();
于 2020-04-23T14:57:02.937 回答
-2

我还没有尝试过,但是以下应该可以

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

本质上你不想替换“\”,你想替换由“\s”转义序列表示的字符。

不幸的是,您需要对字母表中的每个字母、每个数字、符号等执行此操作,以涵盖所有基础

于 2010-03-19T17:49:38.270 回答