我不知道';我不明白为什么我的nodejs/javascript正则表达式是';行不通

我不知道';我不明白为什么我的nodejs/javascript正则表达式是';行不通,javascript,regex,node.js,Javascript,Regex,Node.js,我正试图解析一些简单的文本: 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 我有一个正则表达式,我在不同的正则表达式测试网站上测试过: \w{3}\s+\d{1,2}\s\d{2}\:\d{2}\s\w{4}\_\d 我尝试将示例文本作为Node.js应用程序中以下函数的输入,并返回一个对象或数组

我正试图解析一些简单的文本:

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
我有一个正则表达式,我在不同的正则表达式测试网站上测试过:

\w{3}\s+\d{1,2}\s\d{2}\:\d{2}\s\w{4}\_\d
我尝试将示例文本作为Node.js应用程序中以下函数的输入,并返回一个对象或数组,其中包含从月份到行尾的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


任何帮助都将不胜感激。

您只需使用node.js提供的文件系统操作,而不是尝试解析
ls
的输出。使用文件系统操作,您可以确保您的程序将在(几乎)任何边缘情况下工作,因为输出定义良好。它甚至可以工作的情况下,文件夹将包含更多或更少的文件在未来三个

正如您在评论中所述,您需要文件夹中文件的名称和日期/时间。让我们看看:

fs.readdir
将为您提供路径中指定的文件夹中的文件名数组。您可以将它们传递到
fs.stat
以查找mtime:

fs.stat()

因此,您的代码将在以后显示如下:

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);
            });
        })();
    }
});

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

您的正则表达式失败,因为在向RegExp构造函数传递字符串时需要转义
\
,即
\s
应该是
\\s

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

添加
g
标志以获取所有匹配项。

另外:您想要实现什么?我试图返回3个字符串,每个字符串从月份开始,到行尾结束。您真正想要实现什么。我想你不想返回字符串。你想得到关于文件夹的信息,对吗?@TimWolla:对。我知道这个文件夹将有3个文件,而且只有3个。我正在尝试从他们那里获取上次访问的姓名和日期/时间。我想一旦我有了这些字符串,我就可以把它们分开。看看我的答案;)这似乎是更明智的方法!fs.readdir()工作起来很有魅力,但出于某种原因,我在fs.stat()中遇到了以下错误:{[error:enoint,stat'save_1']errno:34,code:'enoint',path:'save_1'}@bbbgscott fs.readdir似乎只给出了文件名。然后手动为目录添加前缀:
fs.stat('my/directory/'+files[i]…
var regex = new RegExp( "\\w{3}\\s+\\d{1,2}\\s\\d{2}:\\d{2}\\s\\w{4}_\\d", "g" );