Javascript中是否存在RegExp.escape函数?

我只想从任何可能的字符串中建立一个正则表达式。 正则表达式

var usersString = "Hello?!*`~World()[]";
var expression = new RegExp(RegExp.escape(usersString))
var matches = "Hello".match(expression);

有内置的方法吗? 若是没有,人们会使用什么? Ruby具备RegExp.escape 。 我以为我不须要本身写东西,那里确定有一些标准。 谢谢! express


#1楼

在jQueryUI的自动完成小部件(1.9.1版)中,他们使用略有不一样的正则表达式(第6753行),这是将正则表达式与@bobince方法结合使用。 npm

RegExp.escape = function( value ) {
     return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&");
}

#2楼

这是一个较短的版本。 网络

RegExp.escape = function(s) {
    return s.replace(/[$-\/?[-^{|}]/g, '\\$&');
}

这包括非元字符%&' ,和,但JavaScript的正则表达式规范容许这样作。 函数


#3楼

Mozilla开发人员网络正则表达式指南提供了如下转义功能: this

function escapeRegExp(string) {
  return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
}

#4楼

其余答案中的函数对于转义整个正则表达式是过大的(它们对于转义正则表达式的某些部分可能有用,这些正则表达式随后将被合并为更大的正则表达式)。 spa

若是您对整个正则表达式进行转义并完成了此工做,则引用独立的元字符( .?+*^$|\\ )或开始某些内容( ([{ ) : prototype

String.prototype.regexEscape = function regexEscape() {
  return this.replace(/[.?+*^$|({[\\]/g, '\\$&');
};

是的,使人失望的是,JavaScript没有这种内置函数。 code


#5楼

对于使用lodash的任何人, 从v3.0.0开始,都内置了_.escapeRegExp函数: regexp

_.escapeRegExp('[lodash](https://lodash.com/)');
// → '\[lodash\]\(https:\/\/lodash\.com\/\)'

并且,若是您不想使用完整的lodash库,则可能须要该函数

相关文章
相关标签/搜索