Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将字符串化regexp映射到regexp_Javascript_Regex_String - Fatal编程技术网

Javascript 将字符串化regexp映射到regexp

Javascript 将字符串化regexp映射到regexp,javascript,regex,string,Javascript,Regex,String,我想做以下几点: var regex = /^\/(.*)\/?$/i; // "/^\/(.*)\/?$/i" var stringifiedRegex = regex.string(); // //^\/(.*)\/?$/i/ var newRegex = new RegExp(stringifiedRegex); 正如您看到的,当将字符串化正则表达式转换回实际正则表达式时,正则表达式被修改,不再与原始正则表达式匹配 你知道怎么解决这个问题吗 Bodo如果必须将正则表达式存储为单个字符

我想做以下几点:

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

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

// //^\/(.*)\/?$/i/
var newRegex = new RegExp(stringifiedRegex);
正如您看到的,当将字符串化正则表达式转换回实际正则表达式时,正则表达式被修改,不再与原始正则表达式匹配

你知道怎么解决这个问题吗

Bodo

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

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

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

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

var newRegex=eval(stringifiedRegex)但是为什么?@NagaJolokia如果不需要,就不要使用
eval
。有两种方法可以在根本不使用
eval
的情况下达到预期效果。这就是为什么我想知道OP试图做什么。为什么你要将regex转换为字符串?RegExp函数接受不带标志的字符串,字符串需要首先剥离到简单的“^\/(.*)\/?$”没有必要解析regex.toString()的结果。已经为您解析了。@NagaJolokia我已经在编辑了。但是OP可能仅限于将整个正则表达式(包括标志)存储为单个stringGood点。更多信息。在OP的问题上会有所帮助。
> regex = /^\/(.*)\/?$/i;
/^\/(.*)\/?$/i
> regex.source
"^\/(.*)\/?$"
> regex.global
false
> regex.ignoreCase
true
> regex.multiline
false