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

问题描述 投票:0回答:4

我尝试了很多方法从 execated 获取 单反斜杠(我不是指来自

html
的输入)。

我可以将特殊字符作为制表符、新行和许多其他字符,然后将它们转义为

\t
\n
\(someother character)
,但是当非特殊字符旁边时我无法获得单个反斜杠.

我不想要这样的东西:

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

如果我尝试在 0 处获取字符,那么我会得到

a
而不是
\

javascript string string-literals backslash
4个回答
93
投票

(参见答案最后的ES2015更新。)

您已将您的问题标记为

string
regex

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

\\

以下字符串以 one 反斜杠开头,您在文字中看到的第一个是一个 转义字符,开始一个 转义序列

\\
转义序列告诉解析器在字符串中放置一个反斜杠:

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

以下正则表达式将匹配一个单个反斜杠(而不是两个);同样,您在文字中看到的第一个字符是开始转义序列的转义字符。

\\
转义序列告诉解析器在正则表达式模式中放置一个反斜杠字符:

var rex = /\\/;

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

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

那是因为首先,您正在编写一个字符串文字,但您实际上想在结果字符串中添加反斜杠,因此您可以使用

\\
来表示您想要的每个反斜杠。但是您的正则表达式 also 需要两个
\\
来表示您想要的每个真正的反斜杠,因此它需要在字符串中看到两个反斜杠。因此,一共有四个。这是我尽可能避免使用
new RegExp(string)
的原因之一;我很容易感到困惑。 :-)

ES2015和ES2018更新

快进到 2015 年,Dolphin_Wood 指出新的 ES2015 标准为我们提供了模板文字、标签函数和

String.raw
函数:

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

str
最终包含字符
\
a
p
p
l
e
。请注意,模板文字中没有
${
,因为
${
在模板文字中开始替换。例如:

let foo = "bar";
let str = String.raw`\apple${foo}`;

...最终成为

\applebar


25
投票

尝试

String.raw
方法:

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

参考这里:String.raw()


16
投票

\
是转义字符,当后跟非特殊字符时,它不会变成文字
\
。 相反,你必须加倍
\\

console.log("\apple");  //-> "apple" 
console.log("\\apple"); //-> "\apple" 

无法获取原始的原始字符串定义或创建没有转义字符的文字字符串。


-3
投票

请尝试下面的一个,它对我有用,我得到带有反斜杠的输出

String sss="dfsdf\\dfds";
System.out.println(sss);
© www.soinside.com 2019 - 2024. All rights reserved.