我怎样才能:
- 将带有标志的 JavaScript RegExp 转换为字符串文字(想想 JSON),
- 然后将该文字转换回正则表达式?
例如对于字符串“今天天气很好”
:
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 ? */
要修改原始 RegExp 属性,请参阅 torazaburo's answer .
最佳答案
查看 RegExp
原型(prototype)上的访问器属性,例如 source
和 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)
重构它。这似乎比尝试使用 regexp 或 eval'ing 将其分开要干净一些。例如,您可以将其字符串化为
function stringifyWithRegexp(o) {
return JSON.stringify(o, function replacer(key, value) {
if (value instanceof RegExp) return [value.source, value.flags];
return value;
});
}
在返回的路上,您可以使用 JSON.parse
和 reviver 来取回正则表达式。
修改正则表达式
如果你想在保留标志的同时修改正则表达式,你可以用修改后的源和相同的标志创建一个新的正则表达式:
var re = /weather/gim;
var newre = new RegExp(re.source + "| is", re.flags);
关于javascript - 如何将正则表达式转换为字符串文字并再次转换回来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38160746/