2016-12-05 100 views
2

子目录目前使用Chokidar做文件观看的文件结构。我有一个要求观看特定的目录,而忽视在该目录中创建的任何子目录。JavaScript的正则表达式来忽略chokidar

例如,
/var/app/current/somedir

我会看任何文件somedir创建。但是,如果一个目录somedir创建,那么我想递归地忽略它,因此也忽略了别的下创建的。

chokidar.watch(configuration.theDir, { 
     ignored: `/\\var\\app\\current\\somedir\\<match anything here, except other directories!>\\<anything here would be ignored and further down...>/`, 
     awaitWriteFinish: { 
      stabilityThreshold: 2000, 
      pollInterval: 100 
     } 
}).on('add', (file, details) => { 
    // console.log(file, path); 
}); 

这个斗争是真实的,我想出如何正确地实现一个正则表达式来做到这一点。不幸的是,创建的目录是随机的,并且名称不是事先知道的。这甚至有可能做到吗?

回答

1

此正则表达式表达式将匹配一切是一个目录或在碱(目录由下述斜线/定义)的子目录所属。

对于你的榜样,该基地是:/var/app/current/somedir

正则表达式:/^\/var\/app\/current\/somedir\/.*[\/].*$/i

测试:

var tests = [ 
    '/var/app/current/somedir/fileOrFolder.txt', 
    '/var/app/current/somedir/fileOrFolder/', 
    '/var/app/current/somedir/fileOrFolder/ssads/sad.s', 
    '/var/app/current/somedir/fileOrFolder.sd/sdasda.asda/', 
    '/var/app/current/somedir/fileOrFolder.txt', 
    '/var/app/current/somedir/fileOrFolder' 
] 

for (var ii = 0, nn = tests.length; ii < nn; ii++) 
{ 
    if (/^\/var\/app\/current\/somedir\/.*[\/].*$/i.test(tests[ii])) 
    { 
     console.log('"'+tests[ii]+'"', 'Matched, so ignored.'); 
    } 
    else 
    { 
     console.log('"'+tests[ii]+'"', 'Not matched, so watch.'); 
    } 
} 

打印在JavaScript控制台以下:

/* 
* "/var/app/current/somedir/fileOrFolder.txt" Not matched, so watch. 
* "/var/app/current/somedir/fileOrFolder/" Matched, so ignored. 
* "/var/app/current/somedir/fileOrFolder/ssads/sad.s" Matched, so ignored. 
* "/var/app/current/somedir/fileOrFolder.sd/sdasda.asda/" Matched, so ignored. 
* "/var/app/current/somedir/fileOrFolder.txt" Not matched, so watch. 
* "/var/app/current/somedir/fileOrFolder" Not matched, so watch. 
*/ 
+1

哦,伙计谢谢非常!!而已! – dvsoukup