【问题标题】:How to match multiple string keywords when you read each line of file (fs) and get the results?读取文件(fs)的每一行并获取结果时如何匹配多个字符串关键字?
【发布时间】:2017-11-10 15:14:15
【问题描述】:

基本上我有来自客户端的多个搜索字符串,我必须在文件的每一行中找到这些字符串,如果该行与来自用户输入的所有字符串匹配,则将该行推送到结果,下面的代码发送空数组results .

如何遍历每个搜索字符串并找到匹配项,一旦循环完成,将所有匹配行推送到results

searchLogs.js

/* Example client input   
    var searchStr = [{"text":"457383",{"text":"requestPdr"}]
    */
async.eachSeries(filesData.logFiles, function(logfile, done) {
        // read file
        readStream = fs.createReadStream('./logs/' + filesData.searchEnv + '/' + logfile.filename, 'utf8')
        readStream.pipe(split())
            .on('data', function(line) {
                for (var i = 0; i < searchStr.length; i++) {
                    if (line.toLowerCase().indexOf(searchStr[i].toLowerCase()) != -1)
                        results.push({
                            filename: logfile.filename,
                            value: line
                        });

                }
            });

    },
    function(err) {
        if (err) {
            console.log('error', err);
        }
        readStream.on('end', function() {
            callback(results);
        });
        results = [];
    });

【问题讨论】:

  • 我想有两种情况。一种是代码抛出错误但将err 留空,另一种是 if 语句永远不会为真。我认为后者更有可能,但您可以检查并发布您的结果吗?

标签: javascript arrays node.js search fs


【解决方案1】:

尝试改变

searchStr[i].toLowerCase()

searchStr[i]['text'].toLowerCase()

【讨论】:

  • searchStr 看起来像您提供的示例吗?如果是这样,它如何具有toLowerCase 方法? searchStr[i] 不是一个对象吗?
猜你喜欢
  • 1970-01-01
  • 2019-11-02
  • 1970-01-01
  • 2020-03-19
  • 2017-08-09
  • 2011-12-08
  • 1970-01-01
  • 1970-01-01
  • 2017-09-13
相关资源
最近更新 更多