2016-12-05 103 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