javascript - Firefox Add-on-SDK page-mod 匹配模式/通配符错误

标签 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 中。谢谢。

最佳答案

page-mod文档表明 includeexclude 属性可以是任何字符串(带有有限的通配符)、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 exceptedPages =/http:\/\/forum\.blockland\.us\/.*sa=.*/;

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

请注意,当表示将用作 new RegExp() 构造函数的输入的字符串时,如果该字符串在源代码中表示,则需要使用双反斜杠“\”。这是因为当您的代码被解释时,文本转换为 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>";'
});

关于javascript - Firefox Add-on-SDK page-mod 匹配模式/通配符错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26245973/

相关文章:

javascript - 应用 regEx 后获取 javascript 数组中的值

c# - ASP.NET Web 配置写入、删除 .ASPX 和忽略带句点的文件名。

python - 在 Firefox 浏览器窗口中打开程序文件

Firefox 扩展在安装时打开一个页面

javascript - 类型错误 : [API] is undefined in content script or Why can't I do this in a content script?

javascript - IE 10 中的 event.touches 回退?

javascript - 如何在js中设置图像对象的高度和宽度

javascript - 为什么不能在循环或嵌套函数内调用 React Hooks?

javascript - 如何在移动设备上存储配置信息?

用于 IP 到位置 API 的 PHP 正则表达式