Firefox 附加 SDK 模式匹配不起作用

Firefox add-on SDK pattern matching not working

当我使用下面的代码时

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

pageMod.PageMod({
  include: "http://www.page.com/user/*",
  contentScript: 'window.alert("user");'
});

我很警觉。但我想替换“http://www”。部分所以我尝试了:

*://*.page.com/user/*
*://page.com/user/*
*.page.com/user/*

和 none 对我有用。 developer.mozilla.org 中的示例表明至少其中一个应该有效。这些有什么问题?

我以前遇到过这个问题,你不能在模式中使用超过 1 个 *(通配符)。

您有 2 个选择

  • 使用一系列网站,即 ["http://www.page.com/user/*", "https://www.page.com/user/*"]
  • 使用 RegEx(正则表达式)

这里是你如何使用 RegEx 来获得你想要的东西,当你尝试 *://*.page.com/user/*

使用以下正则表达式:.+:\/\/(.+\.)?page\.com\/user\/.*

这是它的工作原理(如果你不知道 RegEx,我建议学习它):

.+          # Any character 1+ times - Selects the Protocol (http, https, ftp)
:\/\/       # :// After Protocol (/ have to be escaped using \/)
(.+\.)?     # (Optional) Letters followed by a . (dot) - (www.)
page        # Website Name - (page)
\.com       # .com - (Top-Level Domain)
\/user\/    # Folder /user/ (/ have to be escaped using \/)
.*          # Any character 0 or more times - (Any folders / files after the /user/ folder)

如果您还不知道 RegEx,这是一个学习正则表达式的好网站:RegexOne

因此,您的完整 include 将是:

include: /.+:\/\/(.+\.)?page\.com\/user\/.*/,

请注意,在 JavaScript 中,您通过将正则表达式封装在 /s

中来定义它

这是一个 Live Demo 正则表达式