给出以下代码:
var a = 'somegarbage=http://somesite.com/foo/bar/&moregarbage';
var result = a.match(/http.+\//g);
产生预期结果:["http://somesite.com/foo/bar/"]
现在,如果我这样做:
var a = 'somegarbage=http://somesite.com/foo/bar/&moregarbage';
var config = JSON.parse('{"filter":"/http.+\\//g"}'); //notice the extra '\'?
var result = a.match(config.filter);
它返回 null。我认为这与 JSON 中 \
的字符串转义有关。我觉得我缺少一个简单的解决方案。我怎样才能解决这个问题?谢谢。
编辑:
我也尝试过这个,但不起作用:
var a = 'somegarbage=http://somesite.com/foo/bar/&moregarbage';
var config = JSON.parse('{"filter":"/http.+\\//g"}'); //notice the extra '\'?
var result = a.match(new RegExp(config.filter));
最佳答案
JSON 不接受正则表达式作为类型。因此,您只需将正则表达式放入一个字符串中(以/开头,以/结尾,然后在解析它之后,您需要将正则表达式提供给 new RegExp(str) 以将其转换为正则表达式。
你可以这样做:
var a = 'somegarbage=http://somesite.com/foo/bar/&moregarbage';
var x = JSON.parse('{"filter":"http.+/", "flags": "g"}');
x.filter = new RegExp(x.filter, x.flags);
var result = a.match(x.filter);
alert(result);
关于javascript - 如何使用正则表达式和 '\' 字符正确解析 JSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10099277/