我尝试了多种方法从执行中获取 单反斜杠 (我不是指来自html
的输入)。
我可以将特殊字符作为标签,新行和其他许多人将其转移到\\t
或\\n
或\\(someother character)
,但我无法获得单个当非特殊字符位于其旁边时反斜杠。
我不想要像:
str = "\apple"; // I want this, to return:
console.log(str); // \apple
如果我尝试将字符设为0,那么我会a
而不是\
。
答案 0 :(得分:35)
(请参阅答案末尾的ES2015更新。)
您已将问题标记为string
和regex
。
在JavaScript中,反斜杠在字符串文字和正则表达式中都有特殊含义。如果你想在字符串或正则表达式中使用实际的反斜杠,你必须写两个:\\
。
此字符串以一个反斜杠开头,您在文字中看到的第一个字符串是一个转义字符,告诉我们按字面意思取下一个字符:
var str = "\\I have one backslash";
此正则表达式将匹配单个反斜杠(不是两个);再一次,你在文字中看到的第一个字符是一个转义字符,告诉我们按字面意思取下一个字符:
var rex = /\\/;
如果你使用字符串来创建正则表达式(而不是像我上面那样使用正则表达式文字),请注意你要处理两个级别:字符串级别和正则表达式级别。因此,要使用与单个反斜杠匹配的字符串创建正则表达式,最后使用四:
// Matches *one* backslash
var rex = new RegExp("\\\\");
那是因为首先,你正在写一个字符串文字,但你想在其中放入反斜杠。因此,对于您想要的每个反斜杠,使用\\
执行此操作。但是你的正则表达式 对于你想要的每一个真正的反斜杠需要两个\\
,所以它需要在字符串中看到两个反斜杠。因此,共有四个。这是我尽可能避免使用new RegExp(string)
的原因之一;我很容易混淆。 : - )
快进到2015年,as Dolphin_Wood points out新的ES2015标准为我们提供了模板文字,标记函数和String.raw
函数:
// Yes, this unlikely-looking syntax is actually valid ES2015
let str = String.raw`\apple`;
str
最终得到的字符为\
,a
,p
,p
,l
和e
它。请注意,“字符串”(模板)中没有${
,因为这是模板文字而${
开始替换。 E.g:
let foo = "bar";
let str = String.raw`\apple${foo}`;
...最终成为\applebar
。另请注意,这与C#中的“逐字”字符串不太相似,因为不允许与规范中的LegacyOctalEscapeSequence匹配的序列并导致语法错误。所以例如
// Fails
let str = String.raw`c:\foo\12\bar`;
...失败,因为\12
看起来像遗留的八进制文字。
答案 1 :(得分:12)
\
是一个转义字符,当后跟一个非特殊字符时,它不会成为文字\
。相反,你必须加倍\\
。
console.log("\apple"); //-> "apple"
console.log("\\apple"); //-> "\apple"
无法获取原始的原始字符串定义或创建没有转义字符的文字字符串。
答案 2 :(得分:9)
答案 3 :(得分:1)
请尝试以下对我有用的方法,我得到的输出带有反斜杠
String sss="dfsdf\\dfds";
System.out.println(sss);