我正在编写一个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.*/"
]
}
问题是正则表达式仅在未被qutoation标记包围时才起作用。
这有效:
include: [/.*foo.*/, /.*bar.*/],
你不工作:
include: ["/.*foo.*/", "/.*bar.*/"],
Json要求将字符串括在引号中。
在服务器端,我正在使用PHP并将我的正则表达式放在这样的数组中:
<?
$regexes = array(".*foo.*",".*bar.*");
echo json_encode(array("urls" => $regexes));
这会产生firefox无法使用的输出。
如何将我的正则表达式传递给firefox扩展名?
Maby我需要在扩展端做一些str_repl的东西吗?
但是怎么样?我怎么能正确地做到这一点?答案 0 :(得分:2)
JSON格式没有为正则表达式定义任何内容,您必须在解码后构建它们。
假设你有这个解析过的数组:
var strs = [".*foo.*", ".*bar.*"];
然后你可以制作一个像这样的正则表达式数组:
var regexs = strs.map(function(v){ return new RegExp(v) });
如果您希望使用{/ 1}}发送正则表达式字符串,如
/
然后你可以做
var strs = ["/.*foo.*/", "/.*bar.*/"];