我需要在我的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中。感谢。
答案 0 :(得分:1)
page-mod文档表明include
和exclude
属性可以是任何字符串(包含有限的通配符),RegExp(regular 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>";'
});