在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');