RegExp转义函数问题-Javascript

RegExp转义函数问题-Javascript,javascript,regex,regexp-replace,Javascript,Regex,Regexp Replace,试图逃避特殊角色。 我键入$或^或|它工作正常。 为什么我的以下代码没有转义(){}?*+并且\当我键入这些时,我得到无效的表达式错误 escape = function(value) { return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&"); } 上面的表达有问题吗 MDN建议这样做 function escapeRegExp(string) { return string.replace(/[.*+\-?

试图逃避特殊角色。 我键入$或^或|它工作正常。 为什么我的以下代码没有转义(){}?*+并且\当我键入这些时,我得到无效的表达式错误

escape = function(value) {
    return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&");
}
上面的表达有问题吗

MDN建议这样做

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

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

它们位于字符类中(由
[]
表示),这意味着它们不需要转义。它们只需要在字符类之外和正则表达式中转义,因为它们表示某些操作(如
{1,3}
表示“包含一到三次”)


对于您的问题,还有一点需要澄清的地方-代码不是转义
\
,而是通过将两个代码放在一起来转义
\
\
是对
\
的转义。因此,只有
{}
()
没有被转义,以回答您文章顶部的问题。

它们不需要被转义,因为它们位于
[]
内部(这意味着它们是字符类的一部分),如果它们在外部,则需要转义以与普通字符匹配。因此,如果我必须转义[]或?或*我需要将它们放在[]之外。因为当我键入()或?或+或*或\时,我得到了无效的常规exp错误。我没有为{}$#| ^得到这个错误。好的,我真的很困惑,杰克!!!当我键入{}或$或#或^或|时,没有抛出错误。但是当我键入()或者?或者+或者*或者\我得到了无效的正则表达式错误。我的函数如何转义${}和all而不是?+\