我不明白为什么我的nodejs / JavaScript的正则expression式不工作

我有一些简单的文字,我试图parsing:

total 4.0K -rw-rw-r-- 1 346 Mar 1 08:50 save_1 -rw-rw-r-- 1 0 Feb 28 17:28 save_2 -rw-rw-r-- 1 0 Feb 28 17:28 save_3 

我有一个正则expression式,我已经testing了不同的正则expression式testing网站:

 \w{3}\s+\d{1,2}\s\d{2}\:\d{2}\s\w{4}\_\d 

我正在尝试将示例文本作为Node.js应用程序的以下函数中的input,并返回一个对象或数组,其中包含3个不同的匹配项,从月份到行尾。

 function parse(str) { var regex = new RegExp("\w{3}\s+\d{1,2}\s\d{2}\:\d{2}\s\w{4}\_\d"); return regex.test(str); //return str.match(regex); } 

我不明白为什么.test()的布尔值是false,而.match()的对象是null。

任何帮助将不胜感激。

而不是试图parsingls的输出, 这是不好的 ,你应该简单地使用node.js提供的文件系统操作。 使用文件系统操作,你可以确定你的程序将在(几乎)任何边界情况下工作,因为输出已被很好的定义。 它甚至可以在文件夹将来会包含比以前更多或更less的文件的情况下工作!

正如你在评论中所说的那样,你需要文件夹中文件的名字和date/时间。 所以让我们看看:

fs.readdir(path, callback)fs.readdir会给你在path中指定的文件夹的一个文件名数组。 您可以将它们传递给fs.stat以查找mtime:

fs.stat(path, callback)fs.stat()会给你一个包含mtime属性中的mtimefs.Stats对象。

所以你的代码看起来像这样:

 fs.readdir('dir', function (err, files) { for (var i = 0; i < files.length; i++) { (function () { var filename = files[i] fs.stat('dir/' + filename, function (err, stats) { console.log(filename + " was last changed on " + stats.mtime); }); })(); } }); 

输出是:

 [timwolla@~/test]node test.js 5 was last changed on Fri Mar 01 2013 20:24:35 GMT+0100 (CET) 4 was last changed on Fri Mar 01 2013 20:24:34 GMT+0100 (CET) 2 was last changed on Fri Mar 01 2013 20:24:33 GMT+0100 (CET) 

如果您需要返回值,请使用这些方法的相应Sync 。 但是,这些会阻止你的node.js事件循环。

你的正则expression式失败了,因为在向RegExp构造函数传递一个string时,你需要转义\ ,即\s应该是\\s

 var regex = new RegExp( "\\w{3}\\s+\\d{1,2}\\s\\d{2}:\\d{2}\\s\\w{4}_\\d", "g" ); 

g标志被添加来获得所有的匹配。