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