【发布时间】:2015-03-08 18:25:29
【问题描述】:
我有一个白名单,用户可以在其中输入特定的 URL/URL 模式(仅针对 http 和 https。
我想转换并比较这些 URL/URL 模式,以便可以像这样使用 通配符选择器 (*)
用户输入:
example.*/test我想将其转换为:
*//*.example.*/test使其匹配:
http://www.example.com/test,https://example.co.uk/test
另一个例子:
用户输入:
http://www.*.com/*我想将其转换为:
http://www.*.com/*使其匹配:
http://www.blah.com/test,http://www.other.com/null.html
和
用户输入:
www.example.com/*我想将其转换为:
*//www.example.com/*使其匹配:
http://www.example.com/testtwo,https://www.example.com/arfg
我想插入一个前导协议(如果它没有被用户包含的话)的原因是因为我正在使用它来与当前标签 URL 进行比较。
我得到了这个 URL 字符串数组并想将它们与当前 url 进行比较,但在匹配所有用例时遇到了问题:
"isNotWhitelisted" : function(){
var whitelist = MyObject.userLists.whitelist;
var currentUrl = document.location.href;
for(var i=0; i<whitelist.length; i++){
var regexListItem = new RegExp(whitelist[i].toString().replace(".", "\\.").replace("*", ".+"));
if(currentUrl.match(regexListItem)) {
return false;
}
}
return true;
},
-
首先,正则表达式转换匹配结束情况(例如
example.com/*,但不匹配example.*/about之类的类型 -
这是 Chrome 扩展程序的一部分,难道没有更好/更简单的方法可以使用内置方法吗?
提前感谢您的帮助。
【问题讨论】:
-
如果你不确定它是否正确,你不应该创建一个测试 url 的数组并为每个测试 url 设置一个标志,如果它应该通过吗?
-
这可能会有所帮助:stackoverflow.com/questions/12433271/… Chrome 匹配模式的基于 JS 的实现。
-
你的正则表达式转换错误;离开
.而不是文字\.将无法正常工作。这只是一个问题。 -
我不想讲太多细节;
.+匹配(1+ 任意字符),但example.com中剩余的句点也匹配任意字符;example_com/test将匹配。 -
@Xan Ahh 我现在完全明白了,所以
.replace(".", "\\.").replace("*", ".+")会有所改进,但还有更多问题。为建议喝彩
标签: javascript arrays regex url google-chrome-extension