我正在尝试为我的NodeJS(12.8.0)项目构建一个正则表达式,以从垃圾邮件的.eml
文件中提取电子邮件的纯文本内容(构建一个简单的垃圾邮件过滤器来娱乐)。 / p>
为此,我编写了此正则表达式:
[-]{14}[0-9]*\s.+[\s]+.+(?:[\s]*)([\s\S]+)[\s]{3}[-]{14}[0-9]+[\r\n]
但是,当我在NodeJS中使用此正则表达式时,得到的值为null
,而不是邮件的内容。
const regexp = new RegExp("[-]{14}[0-9]*\s.+[\s]+.+(?:[\s]*)([\s\S]+)[\s]{3}[-]{14}[0-9]+[\r\n]");
let matches = content.match(regexp);
console.log(matches);
我在regex101.com上添加了我的正则表达式,它可以正常工作,但是很有趣,它告诉我它找到了一个Group 1
组,并显示了正确的内容...但是没有显示什么行(例如Full Match
)。
现在添加一些更有趣的内容,当我将其交换到PCRE
时,它可以很好地工作(甚至显示行)。
请注意,regex101上的演示包含实际的示例邮件。
编辑:根据@CertainPerformance的建议,我将代码更新为以下内容,不幸的是,这将返回false
而不是true
:
const regexp = /[-]{14}[0-9]*\s.+[\s]+.+(?:[\s]*)([\s\S]+)[\s]{3}[-]{14}[0-9]+[\r\n]/;
let matches = regexp.test(content);
console.log(matches); // false
以及以下内容,它们仍返回null
:
const regexp = /[-]{14}[0-9]*\s.+[\s]+.+(?:[\s]*)([\s\S]+)[\s]{3}[-]{14}[0-9]+[\r\n]/;
let matches = content.match(regexp);
console.log(matches); // null
编辑2:在PHP中测试了正则表达式,它工作得非常好...似乎必须逐渐消失...
编辑3:添加整个代码段以希望有人能发现问题...
const pattern = /[-]{14}[0-9]+[\s].+[\s]+.+(?:[\s]*)([\s\S]*)[\s]{3}[-]{14}[0-9]+[\r\n]/;
const spamFolder = './datasets/spam/';
fs.readdir(spamFolder, (err, files) => {
if (err) return console.log('Unable to scan directory: ' + err);
// Loop over each file
files.forEach(file => {
// Read the file
var contents = fs.readFileSync(spamFolder + file, 'utf8');
var matches = contents.match(pattern);
console.log(matches); // null
});
});