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

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更新.)

您已经标记的问题都stringregex.

在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)尽可能避免使用的原因之一; 我很容易混淆.:-)

ES2015更新

快进到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看起来像遗留的八进制文字.

  • @kev:服务器发送的是无效的 JSON。JSON(与 JavaScript 不同)不能容忍未定义的转义序列 (`\a`)。如果这意味着是反斜杠,是的,它必须在服务器端转义:`{“apple”:“\\ apple”}`。(即使 JSON 容忍无效的转义,您也会希望这样做,因为 `{"nectarine":"\nectarine"}`,其中将是 `<CR>ectarine`,因为 `\n` 是换行符。) (2认同)

And*_*y E 12

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

console.log("\apple");  //-> "apple" 
console.log("\\apple"); //-> "\apple" 
Run Code Online (Sandbox Code Playgroud)

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

  • 通过es6 [String.raw](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/raw)方法可以生成原始字符串 (5认同)

Dol*_*ood 10

尝试String.raw方法:

str = String.raw`\apple` // "\apple"
Run Code Online (Sandbox Code Playgroud)

参考这里:String.raw()

  • 请注意,模板文字中的任何地方都没有`$ {`.:-) (3认同)
  • 并且您不能在模板字符串中使用八进制文字,例如"1\2",因此这不是一种有效的通用技术,可以避免反斜杠转义. (2认同)