当然,JSON不支持Regex文字。
所以,
JSON.stringify(/foo/)
给出:
{ }
有任何解决方法吗?
答案 0 :(得分:10)
我认为这是你能得到的最接近的地方:
RegExp.prototype.toJSON = function() { return this.source; };
JSON.stringify({ re: /foo/ }); // { "re": "foo" }
答案 1 :(得分:6)
您可以传递一个custom replacer function to JSON.stringify
并将正则表达式转换为字符串(假设表达式是数组或对象的一部分):
JSON.stringify(value, function(key, value) {
if (value instanceof RegExp) {
return value.toString();
}
return value;
});
如果您实际上不想/需要创建JSON,只需调用表达式的toString()
方法。
答案 2 :(得分:2)
虽然JavaScript对象允许您将正则表达式作为值,但JSON不允许,因为它只用于存储数据,而不是代码。
作为解决方法,您可以使用onString()
方法将正则表达式转换为字符串。
var str = /([a-z]+)/.toString(); // "/([a-z]+)/"
答案 3 :(得分:1)
您可以使用replacer功能:
JSON.stringify(/foo/,
function(k, v) {
if (v && v.exec == RegExp.prototype.exec) return '' + v;
else return v;
})