2

URLから取得した正規表現のリストでpagemodを使用するFirefox拡張機能を作成しています。

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.*/"
    ]
}

問題は、正規表現が引用符で囲まれていない場合にのみ機能することです。

これは機能します:

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

Thieは機能しません:

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

Json では、文字列を引用符で囲む必要があります。

サーバー側では、私はPHPで作業しており、そのような配列に正規表現を持っています:

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

これにより、firefox では処理できない出力が生成されます。

正規表現を Firefox 拡張機能に渡すにはどうすればよいですか?

たぶん、拡張側で str_repl のようなことをする必要がありますか?

しかし、どのように?そして、どうすれば適切に行うことができますか?

4

1 に答える 1

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)) });
于 2013-02-06T09:28:09.627 に答える