在JavaScript RegExp中复制Java的"Pattern.quote"的功能

Mat*_*rog 8 javascript java regex string firefox-addon

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

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

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

Mat*_*rog 6

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

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

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

var quotedURL = url.replace(regexpSpecialChars, '\\$1');
Run Code Online (Sandbox Code Playgroud)

来代替,例如,所有$的用\$的.然后你可以从quotedURL以下构建RegExp :

var myRegExp = new RegExp(quotedURL, 'gi');
Run Code Online (Sandbox Code Playgroud)