我怎么能够:
例如使用String "the weather is nice today":
var myRe = new RegExp("weather","gi");
var myReToString = myRe.toString(); // myReToString is now "/weather/gi"
var myReCopy = /* How to get this copy only from myReToString ? */
Run Code Online (Sandbox Code Playgroud)
要修改原始的RegExp属性,请参阅torazaburo的答案.
小智 5
看看RegExp原型上的访问器属性,例如source和flags.所以你可以这样做:
var myRe = new RegExp("weather", "gi")
var copyRe = new RegExp(myRe.source, myRe.flags);
Run Code Online (Sandbox Code Playgroud)
有关规范,请参阅http://www.ecma-international.org/ecma-262/6.0/#sec-get-regexp.prototype.flags.
如果您这样做的目的是序列化正则表达式,例如进入JSON,然后反序列化它,我建议将正则表达式存储为元组[source, flags],然后使用重构它new RexExp(source, flags).这似乎比尝试使用regexp或eval'分开它更清晰.例如,您可以将其字符串化为
function stringifyWithRegexp(o) {
return JSON.stringify(o, function replacer(key, value) {
if (value instanceof RegExp) return [value.source, value.flags];
return value;
});
}
Run Code Online (Sandbox Code Playgroud)
在回来的路上你可以使用JSON.parsereviver来恢复正则表达式.
如果要在保留标志的同时修改正则表达式,可以使用修改后的源和相同的标志创建新的正则表达式:
var re = /weather/gim;
var newre = new RegExp(re.source + "| is", re.flags);
Run Code Online (Sandbox Code Playgroud)