我只想从任何可能的字符串中创建一个正则表达式。
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库,则可能只需要该函数 !
来源:oschina
链接:https://my.oschina.net/u/3797416/blog/3163565