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

IT技术 javascript string substring backslash
2021-01-27 19:06:06

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

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

我不想要这样的东西:

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

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

4个回答

(请参阅答案末尾的 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最终包含字符\, a, p, p, l, 和e请注意${您的“字符串”(模板)中没有,因为这是一个模板文字并${开始替换。例如:

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

...最终是\applebar更新:从 ES2018 开始,以下内容不再适用,它更新了模板文字以允许无效的转义序列,详情请点击此处另请注意,这不太像C# 中的“逐字”字符串或类似的字符串,因为与规范中LegacyOctalEscapeSequence匹配的序列是不允许的,并且会导致语法错误。所以例如

// Fails
let str = String.raw`c:\foo\12\bar`;

...失败,因为它\12看起来像一个传统的八进制文字。

@kev:服务器发送的是无效的 JSON。JSON(与 JavaScript 不同)不容忍未定义的转义序列 ( \a)。如果这是一个反斜杠,是的,它必须在服务器端转义:{"apple":"\\apple"}(即使 JSON 容忍无效的转义,你也会想要,因为{"nectarine":"\nectarine"},那将是<CR>ectarine因为\n是换行符。)
2021-03-25 19:06:06
它看起来像\12那种限制(也有与问题\u\x等等)走了一段2016年以后迟到,所以在现代浏览器来避免的唯一的事情是${
2021-03-25 19:06:06
如果已经分配了带有反斜杠的变量,您如何使用 console.log() (因为它像从服务器那样返回)?
2021-04-03 19:06:06
@kev:我不明白这个问题。
2021-04-05 19:06:06
String.raw是我的问题的唯一解决方案,谢谢。
2021-04-06 19:06:06

尝试String.raw方法:

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

参考这里:String.raw()

并且您不能在模板字符串中使用八进制文字,1\2因此这不是避免反斜杠转义的真正有效的通用技术。
2021-03-12 19:06:06
请注意${,模板文字中没有任何内容。:-)
2021-04-08 19:06:06

\是一个转义字符,当后跟一个非特殊字符时,它不会变成一个字面量\相反,您必须将其翻倍\\

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

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

通过 es6 String.raw方法使原始字符串成为可能
2021-04-07 19:06:06

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

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