我想做以下事情:
var regex = /^\/(.*)\/?$/i;
// "/^\/(.*)\/?$/i"
var stringifiedRegex = regex.string();
// //^\/(.*)\/?$/i/
var newRegex = new RegExp(stringifiedRegex);
正如您所看到的,将字符串化的正则表达式转换回真正的RegExp时,正则表达式已被修改,并且不再与原始正则表达式匹配。
知道如何解决这个问题吗?
博多
答案 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