字符串化正则表达式?

时间:2013-11-29 00:13:37

标签: javascript regex json

当然,JSON不支持Regex文字。

所以,

JSON.stringify(/foo/)

给出:

{ }

有任何解决方法吗?

4 个答案:

答案 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; 
    })