I think you can use regular expression to find two date boundary, and then loop through it for the expected output. Note that this solution cater cross year (no exception handling, it assumed your input string is in constant format).
var str = "Date between March 2017 and June 2018";
var startRE = /between (.*) and/g;
var endRE = /and (.*)/g;
var start = startRE.exec(str);
var end = endRE.exec(str);
var startDate = start[1]
var endDate = end[1]
var startMonth = startDate.split(' ')[0]
var startYear = startDate.split(' ')[1]
const monthNames = ["January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"
];
var endMonth = endDate.split(' ')[0];
var endYear = endDate.split(' ')[1];
for(var y=startYear;y<=endYear; y++){
if(y==endYear){
if(startYear==endYear)
for(var m=monthNames.indexOf(startMonth);m<monthNames.indexOf(endMonth)-1;m++){
console.log("Output:"+monthNames[m] + " " + y);
}
else
for(var m=0;m<monthNames.indexOf(endMonth);m++){
console.log("Output:"+monthNames[m] + " " + y);
}
}
else{
if(y=startYear)
for(var m=monthNames.indexOf(startMonth);m<12;m++){
console.log("Output:"+monthNames[m] + " " + y);
}
else
{
for(var m=0;m<12;m++){
console.log("Output:"+monthNames[m] + " " + y);
}
}
}
}