【发布时间】:2011-01-29 13:48:04
【问题描述】:
这是我的字符串:
var str = "This is my \string";
这是我的代码:
var replaced = str.replace("/\\/", "\\\\");
我的输出不能是:
"This is my \\string"
我已经尝试了所有我能想到的正则表达式和替换值的组合。
感谢任何帮助!
【问题讨论】:
标签: javascript replace backslash
这是我的字符串:
var str = "This is my \string";
这是我的代码:
var replaced = str.replace("/\\/", "\\\\");
我的输出不能是:
"This is my \\string"
我已经尝试了所有我能想到的正则表达式和替换值的组合。
感谢任何帮助!
【问题讨论】:
标签: javascript replace backslash
多年来对此感到困惑,所有答案都坚持认为源字符串需要已经在其中转义了反斜杠......但情况并非总是如此。
这样做..
var replaced = str.replace(String.fromCharCode(92),String.fromCharCode(92,92));
【讨论】:
String.fromCharCode 调用是不必要的。问题中的问题是字符串 literal "This is my \string" 包含 zero 反斜杠。您不能替换开头字符串中没有的内容。字符串变量str可能包含反斜杠,然后可以像str.replace(/\\/g, "\\\\")或str.replaceAll("\\", "\\\\")一样简单地替换它们。但是如果你没有正确地开始你的文字(如问题中所写),这个答案将无济于事。
字符串不包含反斜杠,它包含\s 转义序列。
var str = "This is my \\string";
如果你想要一个正则表达式,你应该有一个正则表达式,而不是一个字符串。
var replaced = str.replace(/\\/, "\\\\");
【讨论】:
问题是您的第一行中的 \ 甚至无法识别。它认为反斜杠将标记转义序列,但 \s 不是转义字符,因此被忽略。您的 var str 被解释为“这是我的字符串”。试试str.indexOf("\\") - 你会发现它是-1,因为根本没有反斜杠。如果您控制 str 的内容,请按照 David 所说的操作 - 添加另一个 \ 以转义第一个。
【讨论】:
如果您有多个实例或反斜杠:
str.split(String.fromCharCode(92)).join(String.fromCharCode(92,92))
【讨论】:
var a = String.raw`This is my \string`.replace(/\\/g,"\\\\");
console.log(a);
结果:
This is my \\string
【讨论】:
使用这个
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'
【讨论】:
如果用例是替换函数的 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)();
【讨论】:
我还没有尝试过,但是以下应该工作
var replaced = str.replace((new RegExp("\s"),"\\s");
本质上你不想替换“\”,你想替换“\s”转义序列所代表的字符。
不幸的是,您需要对字母表中的每个字母、每个数字、符号等执行此操作,以涵盖所有基础
【讨论】:
"\s" 是 "s",所以这也会得到任何其他 s 字符。除非序列是控制字符,否则您最终会在字符串中的每个字符前加上 ``。