我试图限制运行我的chrome扩展程序的网站(基于用户设置,因此无法在manifest.json中进行设置),但我希望正则表达式对用户来说很容易输入。我要查找的正则表达式实际上与chrome扩展名在清单文件中查找的相同类型有关该扩展名将在其上运行的URL。

例如,https://developer.chrome.com/extensions/match_patterns

stackoverflow.com/*

如果我有的话,这是选项页面的输入。我如何获取javascript以使用这种正则表达式验证而不是更正式的正则表达式(包括。?* [] |)?

如果可以使用这种正则表达式检查,我将拉出tab.url和用户选项中的url,并验证以检查扩展名是否需要在当前页面上运行。

最佳答案

您将必须自己分析文本或将字符串简单地转换为RE2(请参见下文):

假设var url = new URL(url_text)(在实际代码中这将不起作用,因为协议可能是*://,所以您必须使用regexp拆分各个部分),下面是一些逻辑示例:


如果url.pathname最后包含一个*,请使用the event filterurlPrefix中的hostEquals
如果url.pathname"/"并且url.hostname最后具有*,请使用hostPrefix
..............


这是一个简单的示例,甚至不检查输入文本中的多个*,但是在工作代码中,请不要忘记还要解析并提供schemes参数以及ports,当然还有各种*放置的情况将产生不同的匹配规则集。

如果简单字符串事件过滤器不适用,或者您不关心性能(不确定代价是否重大并且可以完全衡量),如果没有,则转义该字符串以进行Chrome的RE2匹配,并使用urlMatches或:

url_text.replace(/[{}()\[\]\\.+?^$|]/g, "\\$&").replace(/\*/g, ".*?")

07-24 09:46
查看更多