【问题标题】:Issue with RegExp escape function - JavascriptRegExp 转义函数的问题 - Javascript
【发布时间】:2020-08-23 12:30:09
【问题描述】:

试图转义特殊字符。 我输入 $ 或 ^ 或 |它工作正常。 为什么我下面的代码没有转义 () {} ? * + 和 \ 当我输入这些时,我得到无效的表达式错误。

escape = function(value) {
    return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&");
}

上面的表达有问题???

MDN 建议这样做

function escapeRegExp(string) {
  return string.replace(/[.*+\-?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
}

即使这样,我也面临同样的问题。 {} $ ^ | 没有错误但我得到 () * 的错误? \ +

【问题讨论】:

  • 它们不需要转义,因为它们在 [ ] 内部(这意味着它们是字符类的一部分),如果它们在外部,则需要转义以匹配为普通字符。
  • 所以如果我必须逃避 [ ] 或 ?或 * 我需要将它们放在 [ ] 之外。因为当我输入 () 或 ? or + or * or \ 我得到无效的常规 exp 错误。我没有收到 {} $ # | 的错误^

标签: javascript regex regexp-replace


【解决方案1】:

它们在一个字符类中(用[] 表示),这意味着它们不需要被转义。仅当它们在字符类之外和在正则表达式中时才需要转义,因为它们表示某些操作(例如 {1,3} 表示“包括一到三倍”)。

还有一点要澄清您的问题 - 代码没有转义 \,您通过将其中两个放在一起来转义 \ - \\\ 的转义。所以只有{}() 没有被转义,回答你帖子顶部的问题。

【讨论】:

  • 好吧,我真的很困惑杰克!!!当我输入 {} 或 $ 或 # 或 ^ 或 |没有错误被抛出。但是当我输入 () 或 ? or + or * or \ 我得到无效的常规 exp 错误。我的函数是如何转义 ${} 和 all but not 的? + \
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-04
  • 1970-01-01
相关资源
最近更新 更多