我试图通过正则表达式在我的源代码中找到一些东西,但是我无法让它返回我需要的所有数据。我使用的正则表达式我已经在regex101上测试了它并且我觉得它很好用。
我的来源:
/**
* @author person1
* @author person2
*/
console.log('a');
我想要的是检索person1和person2。
我的代码:
fs.readdir('./src', function (err, files) {
for (var i = 0; i < files.length; i++ ) {
var file = files[i];
fs.readFile('./src/' + file, { encoding: 'utf-8' }, function (err, data) {
if (err)
throw err;
var matches = (/@author (.*)$/gm).exec(data);
console.log(matches);
});
}
});
当跑步时,这只返回person1而不是person2。我的正则表达式错了还是我错过了什么?
答案 0 :(得分:1)
RegExp对象是有状态的,并保留最新匹配的索引,从那里继续。因此,您可能希望在循环中多次运行正则表达式。
var match, authors = [];
var r = /@author (.*)$/gm;
while(match = r.exec(data)) {
authors.push(match[1]);
}
您也可以使用data.match(...)
,但这不会提取匹配组。
答案 1 :(得分:0)
现在您可以使用String.prototype.matchAll
const s = `
/**
* @author person1
* @author person2
*/
console.log('a');
`;
const re = /@author\s+(.*)$/gm;
const people = [...s.matchAll(re)].map(m => m[1]);
console.log(people);