2

我想做以下事情:

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

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

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

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

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

博多

4

1 回答 1

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
于 2013-07-06T12:59:25.727 回答