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

标签 javascript string substring backslash

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

我可以获取特殊字符作为制表符、换行符和许多其他字符,然后将它们转义为\\t\\n\\(someother character) 但是当 non-special character 旁边有一个反斜杠时,我无法得到一个反斜杠。

我不想要这样的东西:

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

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

最佳答案

(请参阅答案末尾的 ES2015 更新。)

您已将您的问题标记为 stringregex

在 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 最终包含字符 \apple。请注意,模板文字中没有 ${,因为 ${ 在模板文字中开始替换。例如:

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

...最终成为 \applebar

关于javascript - 如何在字符串中使用反斜杠 (\)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10041998/

相关文章:

javascript - jQuery Validation : $. data($ ('form' )[0], 'validator' ).settings 返回 undefined

c++ - 在只读场景中何时需要以空字符结尾的字符串?

objective-c - 使用字符串数组从 Objective-C 调用 C 函数

c# 数组的子字符串等价物

java - 我可以使用正则表达式或其他方式更快地执行此操作吗?

ruby - 使用正则表达式扫描子字符串并忽略大小写

javascript - 使用调用、应用、绑定(bind)的箭头功能 - 不起作用?

javascript - 如何删除mongodb中的深层数组?

javascript - 在不修改数据存储的情况下将选项附加到组合框

java - 使用Java替换HTML页面字符串中的关键字