在JavaScript RegEx中复制Java“Pattern.quote”的功能

时间:2010-09-01 01:27:28

标签: java javascript regex string firefox-addon

在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特定的解决方案是可以的。

1 个答案:

答案 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

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