【问题标题】:how can i pass this javascript object in json?我如何在 json 中传递这个 javascript 对象?
【发布时间】:2013-01-21 10:36:25
【问题描述】:

我正在编写一个 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 的东西?

但是怎么做呢?我怎样才能正确地做到这一点?

【问题讨论】:

    标签: php javascript regex json firefox


    【解决方案1】:

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

    【讨论】:

    • 你太棒了,如果你碰巧访问我的城市,请考虑免费提供饮料和住宿/早餐!
    • @TheSurrican 如果您在个人资料中填写相关的“位置”字段,我会考虑它;)
    猜你喜欢
    • 1970-01-01
    • 2016-11-08
    • 2021-11-26
    • 1970-01-01
    • 1970-01-01
    • 2012-03-29
    • 1970-01-01
    • 2014-03-04
    • 1970-01-01
    相关资源
    最近更新 更多