Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript-在集合对象中存储正则表达式?_Javascript_Node.js_Regex - Fatal编程技术网

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,都可以检查域是否被访问。