我只想从任何可能的字符串中建立一个正则表达式。 正则表达式
var usersString = "Hello?!*`~World()[]"; var expression = new RegExp(RegExp.escape(usersString)) var matches = "Hello".match(expression);
有内置的方法吗? 若是没有,人们会使用什么? Ruby具备RegExp.escape
。 我以为我不须要本身写东西,那里确定有一些标准。 谢谢! express
在jQueryUI的自动完成小部件(1.9.1版)中,他们使用略有不一样的正则表达式(第6753行),这是将正则表达式与@bobince方法结合使用。 npm
RegExp.escape = function( value ) { return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&"); }
这是一个较短的版本。 网络
RegExp.escape = function(s) { return s.replace(/[$-\/?[-^{|}]/g, '\\$&'); }
这包括非元字符%
, &
, '
,和,
但JavaScript的正则表达式规范容许这样作。 函数
Mozilla开发人员网络正则表达式指南提供了如下转义功能: this
function escapeRegExp(string) { return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string }
其余答案中的函数对于转义整个正则表达式是过大的(它们对于转义正则表达式的某些部分可能有用,这些正则表达式随后将被合并为更大的正则表达式)。 spa
若是您对整个正则表达式进行转义并完成了此工做,则引用独立的元字符( .
, ?
, +
, *
, ^
, $
, |
, \\
)或开始某些内容( (
, [
, {
) : prototype
String.prototype.regexEscape = function regexEscape() { return this.replace(/[.?+*^$|({[\\]/g, '\\$&'); };
是的,使人失望的是,JavaScript没有这种内置函数。 code
对于使用lodash的任何人, 从v3.0.0开始,都内置了_.escapeRegExp函数: regexp
_.escapeRegExp('[lodash](https://lodash.com/)'); // → '\[lodash\]\(https:\/\/lodash\.com\/\)'