Mik*_*Mik 34 javascript string substring backslash
我尝试了很多方法从执行中得到一个反斜杠(我不是指输入). html
我可以获得特殊字符作为制表符,新行和许多其他人然后将它们转义为\\t或者\\n或者\\(someother character)当我旁边有一个非特殊字符时,我不能得到一个反斜杠.
我不想要这样的东西:
str = "\apple"; // I want this, to return:
console.log(str); // \apple
Run Code Online (Sandbox Code Playgroud)
如果我试着让角色为0,那么我就会得到a而不是\.
T.J*_*der 42
(请参阅答案末尾的ES2015更新.)
您已经标记的问题都string和regex.
在JavaScript中,反斜杠在字符串文字和正则表达式中都有特殊含义.如果你想在字符串或正则表达式中使用实际的反斜杠,你必须写两个:\\.
这个字符串以一个反斜杠开头,你在文字中看到的第一个是一个转义字符,告诉我们按字面意思取下一个字符:
var str = "\\I have one backslash";
Run Code Online (Sandbox Code Playgroud)
这个正则表达式将匹配单个反斜杠(不是两个); 再一次,你在文字中看到的第一个是一个转义字符,告诉我们按字面意思取下一个字符:
var rex = /\\/;
Run Code Online (Sandbox Code Playgroud)
如果您使用字符串来创建正则表达式(而不是像我上面那样使用正则表达式文字),请注意您正在处理两个级别:字符串级别和正则表达式级别.因此,要使用与单个反斜杠匹配的字符串创建正则表达式,最终使用四个:
// Matches *one* backslash
var rex = new RegExp("\\\\");
Run Code Online (Sandbox Code Playgroud)
那是因为首先,你正在编写一个字符串文字,但你想在其中放入反斜杠.所以你要\\为你想要的每一个反斜杠做到这一点.但是你的正则表达式也需要两个\\你想要的每个真正的反斜杠,所以它需要在字符串中看到两个反斜杠.因此,共有四个.这是我new RegExp(string)尽可能避免使用的原因之一; 我很容易混淆.:-)
快进到2015年,正如Dolphin_Wood指出新的ES2015标准为我们提供了模板文字,标签功能和String.raw功能:
// Yes, this unlikely-looking syntax is actually valid ES2015
let str = String.raw`\apple`;
Run Code Online (Sandbox Code Playgroud)
str结束有字符\,a,p,p,l,和e在它.请注意,${在"字符串"(模板)中没有,因为这是模板文字并${开始替换.例如:
let foo = "bar";
let str = String.raw`\apple${foo}`;
Run Code Online (Sandbox Code Playgroud)
......结束了\applebar.另请注意,这与C#中的"逐字"字符串不太相似,因为不允许与规范中的LegacyOctalEscapeSequence匹配的序列并导致语法错误.所以举个例子
// Fails
let str = String.raw`c:\foo\12\bar`;
Run Code Online (Sandbox Code Playgroud)
...失败,因为\12看起来像遗留的八进制文字.
And*_*y E 12
\是一个转义字符,当后跟一个非特殊字符时,它不会成为文字\.相反,你必须加倍\\.
console.log("\apple"); //-> "apple"
console.log("\\apple"); //-> "\apple"
Run Code Online (Sandbox Code Playgroud)
无法获取原始的原始字符串定义或创建没有转义字符的文字字符串.
Dol*_*ood 10
尝试String.raw方法:
str = String.raw`\apple` // "\apple"
Run Code Online (Sandbox Code Playgroud)
参考这里:String.raw()