我试图限制运行我的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 filter和urlPrefix
中的hostEquals
如果url.pathname
是"/"
并且url.hostname
最后具有*
,请使用hostPrefix
..............
这是一个简单的示例,甚至不检查输入文本中的多个*
,但是在工作代码中,请不要忘记还要解析并提供schemes
参数以及ports
,当然还有各种*
放置的情况将产生不同的匹配规则集。
如果简单字符串事件过滤器不适用,或者您不关心性能(不确定代价是否重大并且可以完全衡量),如果没有,则转义该字符串以进行Chrome的RE2匹配,并使用urlMatches
或:
url_text.replace(/[{}()\[\]\\.+?^$|]/g, "\\$&").replace(/\*/g, ".*?")