0

给定以下代码:

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);

它返回空值。我认为它与\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));
4

3 回答 3

2

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);​

这里的工作示例:http: //jsfiddle.net/jfriend00/5pa2j/

于 2012-04-11T03:10:50.973 回答
1

在 javascript 中,/.../RegExp 的语法是一种特殊的语法,而不仅仅是一个字符串。如果要将正则表达式存储为 JSON 中的字符串,则需要使用RegExp 构造函数

var config = JSON.parse('{"filter":"/http.+\\//g"}');
var result = a.match(new RegExp(config.filter));
于 2012-04-11T03:14:14.060 回答
1

使用正则表达式

var a = 'somegarbage=http://somesite.com/foo/bar/&moregarbage';
var config = JSON.parse('{"filter":"http.+/"}'); 
var result = a.match(new RegExp(config.filter, "g"));
于 2012-04-11T03:25:46.273 回答