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

How can I use backslashes (\) in a string?

提问人:Mik 提问时间:4/6/2012 最后编辑:LiamMik 更新时间:3/7/2022 访问量:139106

问:

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

我可以获得制表符、换行符和许多其他特殊字符,然后将它们转义为 or 或,但是当非特殊字符旁边有时,我无法获得单个反斜杠。\\t\\n\\(someother character)

我不想要这样的东西:

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

如果我尝试在 0 处获得字符,那么我会得到而不是 .a\

JavaScript 子字符串 反斜杠

评论

0赞 T.J. Crowder 4/6/2012
您的问题是关于字符串还是正则表达式?或者您通过字符串创建的正则表达式(例如,使用 )?new RegExp(string)
0赞 Mik 4/16/2012
我尝试了各种方法,无论是正则表达式还是字符串方法,但似乎真的没有办法在 javascript 代码中逐字处理或原始字符串。

答:

16赞 Andy E 4/6/2012 #1

\是一个转义字符,当后面跟着一个非特殊字符时,它不会变成一个字面词。相反,你必须加倍.\\\

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

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

评论

7赞 Dolphin_Wood 6/10/2015
原始字符串通过 es6 String.raw 方法成为可能
88赞 T.J. Crowder 4/6/2012 #2

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

您已将问题标记为 和 。stringregex

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

以下字符串以一个反斜杠开头,您在文本中看到的第一个字符串是开始转义序列的转义字符。转义序列告诉解析器在字符串中放置一个反斜杠:\\

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

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

var rex = /\\/;

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

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

这是因为首先,您正在编写一个字符串文字,但您实际上想在生成的字符串中放置反斜杠,因此您想要的每个反斜杠都这样做。但是你的正则表达式要求你想要的每个真正的反斜杠都有两个,因此它需要在字符串中看到两个反斜杠。因此,总共有四个。这是我尽可能避免使用的原因之一;我很容易感到困惑。:-)\\\\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最终在其中有字符 、 、 、 和。请注意,您的模板文字中没有,因为在模板文字中开始替换。例如:\apple${${

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

...最终是.\applebar

评论

0赞 kev 1/16/2017
如果已经分配了带有反斜杠的变量,您如何控制台.log(.log()变量(因为它从服务器返回)?
2赞 T.J. Crowder 1/17/2017
@kev:服务器发送的是无效的 JSON。JSON(与 JavaScript 不同)不允许未定义的转义序列 ()。如果这是反斜杠,是的,它必须在服务器端转义:.(即使 JSON 允许无效转义,您也希望这样做,因为 ,因为是换行符。\a{"apple":"\\apple"}{"nectarine":"\nectarine"}<CR>ectarine\n
1赞 ShreevatsaR 2/14/2018
看起来这种限制(也有问题等)在 2016 年底之后的某个时候消失了,所以在现代浏览器中唯一要避免的是\12\u\x${
1赞 Accountant م 2/5/2021
这是我问题的唯一解决方案,谢谢。String.raw
1赞 TBG 5/3/2023
String.raw`\`;不行,但你可以作弊做,似乎行得通String.raw`\apple`.replace('apple', '');
24赞 Dolphin_Wood 6/10/2015 #3

尝试方法:String.raw

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

此处引用:String.raw()

评论

5赞 T.J. Crowder 1/9/2016
请注意,模板文字中没有任何地方。:-)${
4赞 Wyck 8/25/2016
而且模板字符串中也不能有八进制文字,因此这并不是避免反斜杠转义的有效通用技术。1\2
0赞 TBG 5/3/2023
String.raw`\`;不行,但你可以作弊做,似乎行得通String.raw`\apple`.replace('apple', '');
-3赞 nevergiveup 3/23/2021 #4

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

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

评论

3赞 Alex78191 12/20/2021
问题不在于 Java。