在Java中,您可能会尝试使用stackoverflow.com
制作与网址Pattern.compile("stackoverflow.com")
匹配的正则表达式。但这是错误的,因为.
在正则表达式中具有特殊含义。解决此问题的最简单方法是编写Pattern.compile(Pattern.quote("stackoverflow.com"))
,其中Pattern.compile("\\Qstackoverflow.com\\E")
来自:\Q
"quotes" the entire string。
我想在JavaScript中做同样的事情,但是JavaScript的正则表达式没有赋予\E
和{{1}}任何含义,并且它看起来不像是等效的JavaScript,所以我我不知道该怎么做。我的第一个想法(请参阅下面的答案)是在JavaScript正则表达式中具有特殊含义的任何字符之前加上反斜杠,但这似乎容易出错,我怀疑有人可能知道更好的方法。
这是针对Firefox扩展的,因此Mozilla特定的解决方案是可以的。
答案 0 :(得分:6)
详细说明我的建议,它看起来像这样:
// 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
:
var myRegExp = new RegExp(quotedURL, 'gi');