在JavaScript RegExp 中复制Java的“Pattern.quote”的function

在Java中,您可能尝试使用Pattern.compile("stackoverflow.com")与URL stackoverflow.com匹配的正则表达式。 但这是错误的,因为. 在正则表达式中有特殊含义。 解决这个问题的最简单方法是编写Pattern.compile(Pattern.quote("stackoverflow.com")) ,它出现在: Pattern.compile("\\Qstackoverflow.com\\E") ,它“引用”整个字符串 。

我想在JavaScript中做同样的事情,但是JavaScript的正则表达式没有赋予\Q\E任何含义,它看起来不像是等价的JavaScript,所以我不知道如何去做。 我的第一个想法(请参阅下面的答案)是在JavaScript正则表达式中具有特殊含义的任何字符之前加上反斜杠,但这似乎容易出错,我怀疑有人可能知道更好的方法。

这是针对Firefox扩展,因此Mozilla特定的解决方案是可以的。

要详细说明我的建议,它看起来像这样:

 // A RegExp that matches all the characters which have a special meaning in a RegExp var regexpSpecialChars = /([\[\]\^\$\|\(\)\\\+\*\?\{\}\=\!])/gi; 

我不确定这是否正确,因为某些字符(如!= )在某些情况下似乎只有特殊含义。 但假设它是,那么你会这样做

 var quotedURL = url.replace(regexpSpecialChars, '\\$1'); 

例如,用\$替换所有$ 。 然后你可以从quotedURL构建RegExp:

 var myRegExp = new RegExp(quotedURL, 'gi');