如何在字符串中使用反斜杠(\)?

时间:2012-04-06 10:04:36

标签: javascript string substring backslash

我尝试了多种方法从执行中获取 单反斜杠 (我不是指来自html的输入)。

我可以将特殊字符作为标签,新行和其他许多人将其转移到\\t\\n\\(someother character),但我无法获得单个当非特殊字符位于其旁边时反斜杠。

我不想要像:

str = "\apple";   // I want this, to return:
console.log(str); // \apple

如果我尝试将字符设为0,那么我会a而不是\

4 个答案:

答案 0 :(得分:35)

(请参阅答案末尾的ES2015更新。)

您已将问题标记为stringregex

在JavaScript中,反斜杠在字符串文字和正则表达式中都有特殊含义。如果你想在字符串或正则表达式中使用实际的反斜杠,你必须写两个:\\

此字符串以一个反斜杠开头,您在文字中看到的第一个字符串是一个转义字符,告诉我们按字面意思取下一个字符:

var str = "\\I have one backslash";

此正则表达式将匹配单个反斜杠(不是两个);再一次,你在文字中看到的第一个字符是一个转义字符,告诉我们按字面意思取下一个字符:

var rex = /\\/;

如果你使用字符串来创建正则表达式(而不是像我上面那样使用正则表达式文字),请注意你要处理两个级别:字符串级别和正则表达式级别。因此,要使用与单个反斜杠匹配的字符串创建正则表达式,最后使用

// Matches *one* backslash
var rex = new RegExp("\\\\");

那是因为首先,你正在写一个字符串文字,但你想在其中放入反斜杠。因此,对于您想要的每个反斜杠,使用\\执行此操作。但是你的正则表达式 对于你想要的每一个真正的反斜杠需要两个\\,所以它需要在字符串中看到两个反斜杠。因此,共有四个。这是我尽可能避免使用new RegExp(string)的原因之一;我很容易混淆。 : - )

ES2015更新

快进到2015年,as Dolphin_Wood points out新的ES2015标准为我们提供了模板文字,标记函数和String.raw函数:

// Yes, this unlikely-looking syntax is actually valid ES2015
let str = String.raw`\apple`;

str最终得到的字符为\apple它。请注意,“字符串”(模板)中没有${,因为这是模板文字而${开始替换。 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)

尝试String.raw方法:

str = String.raw`\apple` // "\apple"

参考此处:String.raw()

答案 3 :(得分:1)

请尝试以下对我有用的方法,我得到的输出带有反斜杠

String sss="dfsdf\\dfds";
System.out.println(sss);