Nou Camp side keep pressure on Atletico Madrid and Real Madrid in three way La Liga title race.
Luis Enrique’s side twice came from behind to defeat Villarreal.
Read more Barcelona FC news.
Denis Cheryshev fired home a surprise opener for the visitors on the half hour.
But Brazilian Neymar pounced to level just before the break after keeper Sergio Asenjo parried right into his path.
Early in the second half Luciano Vietto put Villarreal back in front after a goalmouth scramble.
However two goals in the space of three minutes, from Rafina and Lionel Messi, swung the game back in the Catalan giants favour.