使用Gulp我需要在我的文件中搜索字符串,并在找到此字符串时登录到控制台。
当我搜索每个文件中存在的字符串时,以下情况有效。
function logMatches(regex) {
return map(function(file, done) {
file.contents.toString().match(regex).forEach(function(match) {
console.log(match);
});
done(null, file);
});
}
var search = function() {
return gulp.src(myfiles)
.pipe(logMatches(/string to search for/g));
},
但是如果字符串不在每个文件中,那么我会收到错误:
TypeError: Cannot read property 'forEach' of null
我知道有正则表达式匹配的结果,因为它们被记录到控制台(错误之前)。
答案 0 :(得分:0)
看起来您的内联函数被多次调用(我想那是map
应该做的事情。
第一次,正则表达式匹配,正如您在控制台日志中可以正确看到的那样。
但第二次,它并不匹配。因此,.match(regex)
返回null,并且您实际上正在调用null.forEach(...)
,因此错误。
尝试检查正则表达式结果,然后再调用forEach
:
return map(function(file, done) {
var contents = file.contents.toString();
var matches = contents.match(regex);
console.log(contents, matches); // Here you can see what's going on
if(matches) matches.forEach(function(match) {
console.log(match);
});
done(null, file);
});