So, I was interested to find that JSON.stringify
reduces a RegExp to an empty object-literal (fiddle):
JSON.stringify(/^[0-9]+$/) // \"{}\"
Both JSON.stringify and JSON.parse can be customized to do custom serialization and deserialization by using the replacer
and reviver arguments.
var o = {
foo: "bar",
re: /foo/gi
};
function replacer(key, value) {
if (value instanceof RegExp)
return ("__REGEXP " + value.toString());
else
return value;
}
function reviver(key, value) {
if (value.toString().indexOf("__REGEXP ") == 0) {
var m = value.split("__REGEXP ")[1].match(/\/(.*)\/(.*)?/);
return new RegExp(m[1], m[2] || "");
} else
return value;
}
console.log(JSON.parse(JSON.stringify(o, replacer, 2), reviver));
You just have to come up with your own serialization format.