2

我正在编写一个 firefox 扩展,它使用 pagemod 和从 url 获取的正则表达式列表。

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

不工作:

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

/如果您更喜欢使用as in发送您的正则表达式字符串

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

然后你可以做

var regexs = strs.map(function(v){ return new RegExp(v.slice(1,-1)) });
于 2013-02-06T09:28:09.627 回答