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

两盒软妹~` 提交于 2020-02-26 13:34:35

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

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

有内置的方法吗? 如果没有,人们会使用什么? Ruby具有RegExp.escape 。 我觉得我不需要自己写东西,那里肯定有一些标准。 谢谢!


#1楼

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

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

#2楼

这是一个较短的版本。

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

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


#3楼

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

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

#4楼

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

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

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

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


#5楼

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

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

而且,如果您不想使用完整的lodash库,则可能需要该函数

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!