Write a D*mn Unambiguous Censor
JavaScript ES7, 194 bytes

(d,c,s,g=(a,b)=&gt;[...b].reduce((z,l,i)=&gt;z+(a[i]==l?1:0),0))=&gt;[for(s of s.split` `)~d.indexOf(s)?[...c[(x=[for(i of c)g(i,s)]).indexOf(Math.max(...x))]].map((l,i)=&gt;l!=s[i]?`*`:l).join``:s].join` `


A very large function. I'm guessing a few bytes can be golfed off but not much unless I completely change the way it works.