簡體   English   中英

我不明白為什么我的nodejs / javascript正則表達式無法正常工作

[英]I don't understand why my nodejs/javascript regex isn't working

我有一些我正在嘗試解析的簡單文本:

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。

任何幫助將不勝感激。

而不是試圖解析的輸出ls這是不好的 ,你只需要使用由node.js中提供的文件系統操作 使用文件系統操作,您可以確保您的程序(幾乎)可以在任何邊緣情況下工作,因為輸出定義良好。 如果文件夾將來包含的文件多於或少於三個,它甚至可以工作!

正如您在評論中所述,您需要文件夾中文件的名稱和日期/時間。 那么讓我們來看看:

fs.readdir(path, callback)fs.readdir將為您提供path中指定的文件夾中的文件名數組。 您可以將它們傳遞給fs.stat以找出mtime:

fs.stat(path, callback)fs.stat()將為您提供fs.Stats的對象,其中包含mtime屬性中的mtime

所以你的代碼之后會看起來像這樣:

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 -versions。 但是,這些將阻止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標志以獲取所有匹配項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM