【问题标题】:In JavaScript, string '\m' is fully equals to string 'm', why? [duplicate]在 JavaScript 中,字符串 '\m' 完全等于字符串 'm',为什么? [复制]
【发布时间】:2020-09-15 10:09:08
【问题描述】:

console.log('\d' === 'd'); // true

字符 'd' 不是特殊字符,为什么 javascript 要分割转义符号。 在我看来,最好保留转义符号。

当我想使用正则表达式完全匹配字符串-'\d'时,这是不可能的! 以如下代码为例。

console.log(RE.test('\d')); // it should log true 
console.log(RE.test('d'));  // it should log false              

不幸的是,您无法找出正则表达式模式。

【问题讨论】:

  • \d 是一个转义的 d 字符。没有转义序列,因此您只需将文字 d 作为字符串内容。这看起来像an XY problem - 请专注于您要解决的实际问题,因为转义字符肯定不是它。

标签: javascript string


【解决方案1】:

你没有理由在字符串中转义d,JavaScript 会忽略它。如果需要\d,则需要转义转义字符:\\d

另见Why do linters pick on useless escape character?

【讨论】:

  • 所以它只是 javascript 语言的语法。 javascript 中不存在像 '\d' 这样的字符串。对吗?
  • @quanlili 字符串可以有\d,但字符串literals 不能。如果您想在字符串文字中使用\ ,则需要用另一个反斜杠转义该反斜杠。或者使用String.raw函数:let s = String.raw`\d`
  • 是的,我明白了。非常感谢。我之前没有使用过 String.raw \d。它可以输出一个原始字符串。太棒了!
【解决方案2】:

\d正则表达式(数字字符)中具有特殊含义,但在字符串中也有特殊含义(转义的'd'字符,与@987654322一模一样@)。

任何/ 在字符串中创建一个转义序列。有些是“有用的”(\n === 新行),有些可以说是无用的(`'\d' === 'd')。

如果你想要 regex \d,你可以

1 - 改用正则表达式:/\d/

2 - 将字符串'\\d'中的\转义,以便Javascript正确理解包含\d这两个字符的字符串。

【讨论】:

  • 是的,我明白了。非常感谢,兄弟。
猜你喜欢
  • 2019-03-19
  • 2012-06-07
  • 1970-01-01
  • 2016-09-15
  • 2018-08-26
  • 1970-01-01
  • 2012-04-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多