我尝试了很多方法从 execated 获取 单反斜杠(我不是指来自
html
的输入)。
我可以将特殊字符作为制表符、新行和许多其他字符,然后将它们转义为
\t
或\n
或\(someother character)
,但是当非特殊字符旁边时我无法获得单个反斜杠.
我不想要这样的东西:
str = "\apple"; // I want this, to return:
console.log(str); // \apple
如果我尝试在 0 处获取字符,那么我会得到
a
而不是 \
。
(参见答案最后的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)
的原因之一;我很容易感到困惑。 :-)
快进到 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
。
\
是转义字符,当后跟非特殊字符时,它不会变成文字 \
。 相反,你必须加倍\\
。
console.log("\apple"); //-> "apple"
console.log("\\apple"); //-> "\apple"
无法获取原始的原始字符串定义或创建没有转义字符的文字字符串。
请尝试下面的一个,它对我有用,我得到带有反斜杠的输出
String sss="dfsdf\\dfds";
System.out.println(sss);