2013-02-06 59 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;) –