【问题标题】:Why don't I have to escape equal sign?为什么我不必转义等号?
【发布时间】:2016-11-24 00:31:10
【问题描述】:

例如:

"1+1=2".replace(/=/,"aa");
"1+1=2".replace(/\=/,"aa");

返回相同的结果。

这是否意味着我不必在 JavaScript 中转义“=”(等号)?我记得我总是必须在 Java 和 .NET 中转义等号。

我试图从https://www.ecma-international.org/ecma-262/7.0/index.html 找到一些信息,但没有找到任何信息。

谁能帮我看看规范是否谈到了转义等号?

【问题讨论】:

  • =在正则表达式中没有特殊含义,不需要转义。
  • this question@987654322 中的 Java 不会对其进行转义
  • 这是一个无法逃避的 .net 问题:stackoverflow.com/questions/31490169/lookbehind-with-equal-sign
  • @Barmar 您如何解释在正向前瞻(?= ) 中 = 的用法?我认为 = 是一个特殊字符,总是需要转义..
  • 很多字符在(?之后有特殊含义,但在其他地方没有特殊含义,所以不需要转义。

标签: javascript regex


【解决方案1】:

我会在 MDN 网络文档中使用 this table。您会看到= 没有特殊含义——正如@Barmar 所说。您提到了lookaheads,它使用?=,但没有前导?,它只是一个等号。

没有多少特殊字符需要额外的特殊字符才能“工作”,我想这就是它令人困惑的原因。将其视为-[] 的组合:

  • 0-9 匹配“0-9”
  • [0-9] 匹配 "0" and "1" and ... and "9"
  • [0\-9] 匹配“0”和“1”和...和“9”和“-”

所以只有- 没有意义,也不必转义,只有与方括号结合使用。这同样适用于带有/不带有 ?=

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多