将字符串化的正则表达式映射到RegExp

时间:2013-07-06 12:29:56

标签: javascript regex string

我想做以下事情:

var regex = /^\/(.*)\/?$/i;

// "/^\/(.*)\/?$/i"
var stringifiedRegex = regex.string();

// //^\/(.*)\/?$/i/
var newRegex = new RegExp(stringifiedRegex);

正如您所看到的,将字符串化的正则表达式转换回真正的RegExp时,正则表达式已被修改,并且不再与原始正则表达式匹配。

知道如何解决这个问题吗?

博多

1 个答案:

答案 0 :(得分:1)

如果 将正则表达式存储为单个字符串(包括所有标志),则可以使用正则表达式将正则表达式拆分为需要传递给new RegExp的部分(好吧,这是一句话......):

> regex = /^\/(.*)\/?$/i;
/^\/(.*)\/?$/i
> str = regex.toString()
"/^\/(.*)\/?$/i"
> m = str.match(/^[/](.*)[/]([^/]*)$/)
["/^\/(.*)\/?$/i", "^\/(.*)\/?$", "i"]
> newRegex = new RegExp(m[1], m[2])
/^\/(.*)\/?$/i

正则表达式匹配/,然后尽可能地捕获,然后匹配结束/并捕获可能的标记。

或者,如果您可以将其存储在数据库的多个字段中,请分别存储三个标记的源字符串和三个布尔值:

> regex = /^\/(.*)\/?$/i;
/^\/(.*)\/?$/i
> regex.source
"^\/(.*)\/?$"
> regex.global
false
> regex.ignoreCase
true
> regex.multiline
false