查看访问器属性RegExp
原型如source
and flags
。所以你可以这样做:
var myRe = new RegExp("weather", "gi")
var copyRe = new RegExp(myRe.source, myRe.flags);
规格请参见http://www.ecma-international.org/ecma-262/6.0/#sec-get-regexp.prototype.flags.
序列化和反序列化正则表达式
如果您这样做的目的是序列化正则表达式,例如序列化为 JSON,然后将其反序列化回来,我建议将正则表达式存储为元组[source, flags]
,然后使用重构它new RexExp(source, flags)
。这看起来比尝试使用正则表达式将其分开或评估它要干净一些。例如,您可以将其字符串化为
function stringifyWithRegexp(o) {
return JSON.stringify(o, function replacer(key, value) {
if (value instanceof RegExp) return [value.source, value.flags];
return value;
});
}
回来的路上你可以使用JSON.parse
使用恢复器来恢复正则表达式。
修改正则表达式
如果要在保留标志的同时修改正则表达式,可以使用修改后的源和相同的标志创建一个新的正则表达式:
var re = /weather/gim;
var newre = new RegExp(re.source + "| is", re.flags);