这是我的字符串:
var str = "This is my \string";
这是我的代码:
var replaced = str.replace("/\\/", "\\\\");
我无法使输出结果为:
"This is my \\string"
我已经尝试了我所能想到的所有正则表达式和替换值的组合。
非常感谢任何帮助!
这是我的字符串:
var str = "This is my \string";
这是我的代码:
var replaced = str.replace("/\\/", "\\\\");
我无法使输出结果为:
"This is my \\string"
我已经尝试了我所能想到的所有正则表达式和替换值的组合。
非常感谢任何帮助!
我被这个问题困扰了很久,所有的答案都坚称源字符串需要已经包含转义的反斜杠...但并不总是这种情况。
做这个......
var replaced = str.replace(String.fromCharCode(92),String.fromCharCode(92,92));
\s
。var str = "This is my \\string";
如果你想要一个正则表达式,那么你应该使用正则表达式而不是字符串。
var replaced = str.replace(/\\/, "\\\\");
问题在于你的第一行中的 \ 连接符甚至不能被识别。它认为反斜杠将标记转义序列,但 \s 不是一个转义字符,因此它被忽略了。你的 var str 被解释成只是 "This is my string"。尝试 str.indexOf("\\")
- 你会发现它是-1,因为根本没有反斜杠。如果你控制 str 的内容,请按照 David 的建议添加另一个 \ 来转义第一个。
var a = String.raw`This is my \string`.replace(/\\/g,"\\\\");
console.log(a);
结果:
This is my \\string
str.split(String.fromCharCode(92)).join(String.fromCharCode(92,92))
我认为混淆是来自于字符串在浏览器控制台中的显示方式。(我刚刚检查了Chrome)
let myString = "This is my \string";
这里的 myString 实际上不包含任何反斜杠字符。它包含解析为 s
的 \s
序列。
因此,如果您在控制台中显示字符串:
> myString =>
"This is my string"
> console.log(myString)
This is my string
下面的字符串中只有一个反斜杠:
let myString = "This is my \\string";
//string representation includes the escape char as well. So we see double backslashes.
> myString =>
"This is my \\string"
//When you print it, the escape char is not there.
> console.log(myString)
This is my \string
所以,如果你想用两个反斜杠替换反斜杠字符,你可以这样做:
let myNewStringWith2Backslashes= myString.replace("\\","\\\\")
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'
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)();
我没有尝试过这个,但是以下的应该可以工作
var replaced = str.replace((new RegExp("\s"),"\\s");
实际上,您不想替换“\”,而是要替换由“\s”转义序列表示的字符。
不幸的是,为了涵盖所有情况,您需要针对字母表中的每个字母、每个数字、符号等进行此操作。
String.fromCharCode
的调用是不必要的。问题在于问题中的字符串字面量"This is my \string"
不包含任何反斜杠。你不能替换原本就不存在的内容。字符串变量str
可能包含反斜杠,那么可以简单地像这样替换它们:str.replace(/\\/g, "\\\\")
或者str.replaceAll("\\", "\\\\")
。但是如果一开始就没有正确地书写文本(如问题描述中所示),那么这个答案就无法帮到你。 - Sebastian Simon