等价于Perl的\\\\ Q…\\\\ E或quotemeta()的Javascript

|| 在Perl正则表达式中,您可以用
\\Q
\\E
包围子表达式,以表示您希望将该子表达式作为文字字符串进行匹配,即使其中存在元字符也是如此。您还可以使用
quotemeta
函数在字符串中插入正确数量的反斜杠,这样,如果您随后将该字符串内插到正则表达式中,则无论其内容是什么,它都将在字面上进行匹配。 Javascript(在主要浏览器中部署的)是否具有任何等效的内置功能?我可以写我自己的东西,但是我想知道是否不必打扰。     
已邀请:
        没有这样的内置功能。 我建议您不要研究自己的,而应该研究Internet上可用的大量regex转义功能。 该页面提出了以下解决方案(由Colin Snover提出):
RegExp.escape = function(text) {
    return text.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, \"\\\\$&\");
}
或建议使用XRegExp库。     
        据我所知,Quotemeta并不是本地实现的,但是几个月前,我已经将其用于此方面:
function quotemeta (str) {
  // http://kevin.vanzonneveld.net
  // +   original by: Paulo Freitas
  // *     example 1: quotemeta(\". + * ? ^ ( $ )\");
  // *     returns 1: \'\\. \\+ \\* \\? \\^ \\( \\$ \\)\'
  return (str + \'\').replace(/([\\.\\\\\\+\\*\\?\\[\\^\\]\\$\\(\\)])/g, \'\\\\$1\');
}
来自http://phpjs.org/functions/quotemeta:496     
        还有一个quotemeta npm模块,您可以在node.js或浏览器中使用它。实现方式是引用所有非单词字符((5ѭ的缩写)。
String(str).replace(/(\\W)/g, \'\\\\$1\');
之所以可行,是因为所有需要转义的字符都是非单词,而其他最终转义的字符则无害。例如,这里的百分号字符被转义,但是在RegExp中它仍然正常匹配,尽管不需要转义:
if (\"Hello%\".match(RegExp(String(\"%\").replace(/(\\W)/g,\'\\\\$1\')))) { console.log(\"matched!\"); } 
``` 有人分叉了
quotemeta
模块,并指出不需要捕获括号,因此可以将正则表达式进一步简化如下:
String(str).replace(/\\W/g, \'\\\\$&\');
    

要回复问题请先登录注册