Firefox Add-on-SDK page-mod Matchpattern / Wildcard Error

时间:2014-10-07 21:56:32

标签: javascript regex firefox-addon firefox-addon-sdk

我需要在我的pagemod中排除http://forum.blockland.us/*sa=*

但总有这个错误:

Error: There can be at most one '*' character in a wildcard.

这是我的main.js:

var pageMod = require("sdk/page-mod");

pageMod.PageMod({
  include: "http://forum.blockland.us/index.php?action=profile*",
  exclude: "http://forum.blockland.us/*sa=*",
  contentScript: 'document.body.innerHTML = ' +
                 ' "<h1>Page matches ruleset</h1>";'
});

似乎是导致错误的*sa=*。我不确定如何解决这个问题。

如果答案是使用正则表达式或匹配模式,我想知道如何将其包含在main.js中。感谢。

1 个答案:

答案 0 :(得分:1)

page-mod文档表明includeexclude属性可以是任何字符串(包含有限的通配符),RegExpregular expression) ,或这些类型的数组。您可以获得match-patterns on the MDN page describing them的更详细说明。因此,为了匹配您想要的内容,您可以在exclude属性中使用正则表达式而不是带有通配符的字符串文字:

var pageMod = require("sdk/page-mod");

pageMod.PageMod({
  include: "http://forum.blockland.us/index.php?action=profile*",
  exclude: /http:\/\/forum\.blockland\.us\/.*sa=.*/,
  contentScript: 'document.body.innerHTML = ' +
                 ' "<h1>Page matches ruleset</h1>";'
});

从上面可以看出,RegExp只是standard built-in object的另一种类型。它们可以在代码中作为文字输入。您也可以使用构造函数:
var myRegularExpression = new RegExp(pattern [, flags]);

例如:

var excludedPages = /http:\/\/forum\.blockland\.us\/.*sa=.*/;

var excludedPages = new RegExp ("http:\\/\\/forum\\.blockland\\.us\\/.*sa=.*");

请注意,当表示一个字符串,您将用作new RegExp()构造函数的输入时,加倍反斜杠&#34; \&#34;如果字符串在源代码中表示,则是必需的。这是因为在解释您的代码时,将文本转换为String文字使用\来表示下一个字符是特殊的。因此,需要使用双反斜杠\\来表示实际反斜杠\应该在String中。这将导致:

var pageMod = require("sdk/page-mod");
var excludedPages = /http:\/\/forum\.blockland\.us\/.*sa=.*/;

pageMod.PageMod({
  include: "http://forum.blockland.us/index.php?action=profile*",
  exclude: excludedPages,
  contentScript: 'document.body.innerHTML = ' +
                 ' "<h1>Page matches ruleset</h1>";'
});