JavaScript 中是否有 RegExp.escape 函数?

2022-08-29 22:59:56

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

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

有没有内置的方法?如果没有,人们使用什么?Ruby有RegExp.escape。我不觉得我需要写我自己的,必须有一些标准的东西。


答案 1

另一个答案中链接的功能是不够的。它无法转义或(字符串的开头和结尾),或者 ,在字符组中用于范围。^$-

使用此功能:

function escapeRegex(string) {
    return string.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
}

虽然乍一看似乎没有必要,但转义(以及)使函数适合于转义要插入到字符类以及正则表达式的主体中。-^

转义使函数适合转义要在 JavaScript 正则表达式文本中使用的字符,以便以后进行评估。/

由于逃避其中任何一个都没有缺点,因此逃避以涵盖更广泛的用例是有意义的。

是的,这是一个令人失望的失败,这不是标准JavaScript的一部分。


答案 2

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

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

而且,如果您不想需要完整的Lodash库,则可能只需要该功能