我尝试了很多方法从执行中获取单个反斜杠(我不是说来自html<的输入
)。
我可以获取特殊字符作为制表符、换行符和许多其他字符,然后将它们转义为\\t
或\\n
或\\(someother character)
但是当 non-special character 旁边有一个反斜杠时,我无法得到一个反斜杠。
我不想要这样的东西:
str = "\apple"; // I want this, to return:
console.log(str); // \apple
如果我尝试在 0 处获取字符,那么我会得到 a
而不是 \
。
最佳答案
(请参阅答案末尾的 ES2015 更新。)
您已将您的问题标记为 string
和 regex
。
在 JavaScript 中,反斜杠在字符串文字和正则表达式中都有特殊含义。如果您想要在字符串或正则表达式中使用实际的反斜杠,则必须编写两个:\\
。
以下字符串以一个 反斜杠开头,您在文字中看到的第一个是转义字符,开始一个转义序列。 \\
转义序列告诉解析器在字符串中放置一个反斜杠:
var str = "\\I have one backslash";
下面的正则表达式将匹配一个单个反斜杠(不是两个);同样,您在文字中看到的第一个字符是开始转义序列的转义字符。 \\
转义序列告诉解析器在正则表达式模式中放置一个反斜杠字符:
var rex = /\\/;
如果您使用字符串创建正则表达式(而不是像我上面那样使用正则表达式文字),请注意您要处理两个级别:字符串级别和正则表达式级别。因此,要使用与单个反斜杠匹配的字符串创建正则表达式,您最终会使用四个:
// Matches *one* backslash
var rex = new RegExp("\\\\");
那是因为首先,您正在编写一个字符串文字,但您实际上想在结果字符串中放置反斜杠,因此您可以使用 \\
为您想要的每个反斜杠执行此操作。但是您的正则表达式还 需要两个\\
来表示您想要的每个真正的反斜杠,因此它需要在字符串中看到两个反斜杠。因此,一共有四个。这是我尽可能避免使用 new RegExp(string)
的原因之一;我很容易混淆。 :-)
ES2015 和 ES2018 更新
快进到 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
。请注意,模板文字中没有 ${
,因为 ${
在模板文字中开始替换。例如:
let foo = "bar";
let str = String.raw`\apple${foo}`;
...最终成为 \applebar
。
关于javascript - 如何在字符串中使用反斜杠 (\)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10041998/