javascript-在集合对象中存储正则表达式?
我使用javascript-在集合对象中存储正则表达式?,javascript,node.js,regex,Javascript,Node.js,Regex,我使用simplecrawler:D制作了一个简单的爬虫程序 其构造函数有一个set对象,该对象保存访问的URL: this.visited = new Set(); 将在此处添加任何无效URL: this.visited.add(url); 当前,在队列中添加新url时,我会检查是否访问了该url: if (this.visited.has(newURL)) 我可以在这个set对象中使用regEx来阻止特定站点的url,如下所示吗 // to block www.xxx.com/123,
simplecrawler
:D制作了一个简单的爬虫程序
其构造函数有一个set对象,该对象保存访问的URL:
this.visited = new Set();
将在此处添加任何无效URL:
this.visited.add(url);
当前,在队列中添加新url时,我会检查是否访问了该url:
if (this.visited.has(newURL))
我可以在这个set对象中使用regEx来阻止特定站点的url,如下所示吗
// to block www.xxx.com/123, www.xxx.com/456, www.xxx.com/789
this.visited.add('/www\.xxx\.com\/\d/g');
if (this.visited.has(givenURL))
// do not visit
else
// visit
如果可以这样做,那么最好的方法是什么?您可以在集合上循环并检查URL是否与集合中的项目匹配:
this.visited = new Set();
var BreakException = {};
this.visited.add('www\\.xxx\\.com/\\d+');
this.visited.add('www.xxx.com/123')
try {
this.visited.forEach(function(x) {
if ('www.xxx.com/123'.match(new RegExp(x))) {
var visited = true;
throw BreakException;
}
});
} catch (e) {
// do not visit
}
if (visited) {
// visit
}
请注意我添加到集合中的URL。你在问题中使用的那个不起作用
由于
Array,您必须抛出一个异常来中断循环。forEach
不支持break代码>我的方法可能是使用正则表达式从url获取域名,然后将其添加到集合中。然后,无论何时检查访问的URL,而不是完整的URL,都可以检查域是否被访问。