const fs = require('fs');
const path = require('path');
/**
* Matches patterns in text files.
* @param {string[]} filePaths - Array of file paths to search.
* @param {string} pattern - The pattern to search for.
* @param {function} callback - Callback function to handle results.
*/
function matchPatterns(filePaths, pattern, callback) {
if (!Array.isArray(filePaths) || filePaths.length === 0) {
callback(new Error("File paths must be a non-empty array."));
return;
}
if (typeof pattern !== 'string' || pattern.length === 0) {
callback(new Error("Pattern must be a non-empty string."));
return;
}
if (typeof callback !== 'function') {
callback(new Error("Callback must be a function."));
return;
}
let results = [];
function processFile(filePath) {
fs.readFile(filePath, 'utf8', (err, data) => {
if (err) {
console.error(`Error reading file ${filePath}: ${err}`);
callback(err);
return;
}
const matches = findMatches(data, pattern);
if (matches.length > 0) {
results.push({ filePath: filePath, matches: matches });
}
if (results.length === filePaths.length) {
callback(null, results);
}
});
}
function findMatches(text, pattern) {
const regex = new RegExp(pattern, 'g'); // 'g' for global search
const matches = [];
let match;
while ((match = regex.exec(text)) !== null) {
matches.push(match[0]); // Store the matched text
}
return matches;
}
filePaths.forEach(filePath => {
processFile(filePath);
});
}
module.exports = matchPatterns;
Add your comment