2013-02-06 42 views
2

我正在写一个firefox扩展,它使用pagemod和从url中获取的正则表达式列表。我怎样才能通过json这个javascript对象?

var pageMod = require("page-mod"); 
var Request = require("request").Request; 
var hosters = Request({ 
    url: "http://foo.bar/foo", 
    onComplete: function (response) { 
    console.log(response.json.urls); 
    var includeHosters = response.json.urls; 
    pageMod.PageMod({ 
     include: includeHosters, 
     contentScriptWhen: "start", 
     contentScript: '', 
     onAttach: function onAttach(worker) { 
     // my code 
     } 
    }); 
    } 
}).get(); 

从我的服务器的响应看起来是这样的:

{ 
    "urls": [ 
     "/.*foo.*/", 
     "/.*bar.*/" 
    ] 
} 

问题是,当它们没有被qutoation括起来的是正则表达式才能正常工作。

这工作:

include: [/.*foo.*/, /.*bar.*/], 

Thie不起作用:

include: ["/.*foo.*/", "/.*bar.*/"], 

的Json需要字符串用引号括起来。

在服务器端,我与PHP的工作,并有我的正则表达式在这样的一个数组:

<? 
$regexes = array(".*foo.*",".*bar.*"); 
echo json_encode(array("urls" => $regexes)); 

这产生了火狐不能正常工作的输出。

如何将我的正则表达式传递给Firefox扩展?

Maby我需要在扩展端做一些str_repl的东西?

但是如何?我该如何正确地做到这一点?

回答

2

JSON格式没有为正则表达式定义任何东西,你必须在解码后构建它们。

说你有这个解析的数组:

var strs = [".*foo.*", ".*bar.*"]; 

然后你就可以做一个正则表达式数组是这样的:

var regexs = strs.map(function(v){ return new RegExp(v) }); 

如果你喜欢送与/您正则表达式的字符串作为

var strs = ["/.*foo.*/", "/.*bar.*/"]; 

然后你可以做

var regexs = strs.map(function(v){ return new RegExp(v.slice(1,-1)) }); 
+4

你是最棒的,请考虑一下饮料和床/早餐免费,如果你碰巧访问我的城市! –

+2

@TheSurrican我会考虑它,如果你填写您的个​​人资料相关的“位置”字段;) –

+0

现在你做@dystroy;) –