Lionel Messi struck the winner for Barcelona who twice came from behind to beat Villarreal 3-2 at home and move a point behind leaders Real Madrid in La Liga on Sunday.
Barca dominated possession and Luis Suarez had several early chances but it was Villarreal who took the lead with Denis Cheryshev redirecting a Mario Gaspar shot past keeper Claudio Bravo on the half hour.
The Catalan side have been looking more resilient in recent weeks and in-form Neymarknocked in a rebound before halftime after Rafinha's shot had been saved by keeper Sergio Asenjo.
Luciano Vietto restored the visitors' advantage after being set up well by Giovani dos Santos but Barca again bounced back.
Rafinha knocked the ball home after Messi's header had been blocked by Victor Ruiz and then Messi hit a 20-metre shot into the top corner with his weaker right foot after 55 minutes.
Barcelona coach Luis Enrique was pleased with the performance but admitted they lacked concentration for a spell.
"It was a very positive match except for the goals that we conceded," he told reporters.
"At 1-0 we lost our composure for about ten minutes and gave the ball away but up until the first goal we didn't face any danger.
"When the score was at 3-2 we continued to attack as we wanted to finish the match off. We obviously try to keep hold of the ball but if the rival leaves you space then you have to attack it."
Barcelona have 50 points from 21 games while Real, who have also played a game less, beat Real Sociedad 4-1 on Saturday to stay top. Villarreal are sixth on 38 points.
Elsewhere, a late Iago Aspas strike gave Sevilla a 3-2 home victory over Espanyol and moved them up to fourth in La Liga.
Sevilla were seeking revenge for their defeat by Espanyol in the King's Cup last week but they went behind to a Christian Stuani penalty after Salva Sevilla was felled by goalkeeperBeto.
Sevilla, who are yet to lose at home this season, pushed forward and equalised in sensational style through a 35-metre drive from Diogo Figueiras after 26 minutes.
Vitolo slotted home from close range for Sevilla 10 minutes before the break and then Espanyol keeper Kiko Casilla was sent off as he handled a lob from Aspas outside the area.
Sevilla almost threw away the victory with Victor Sanchez firing home 15 minutes from the end but there was still time for Aspas, on loan from Liverpool, to hit the winner a minute from time.
At the Camp Nou, Luis Enrique surprisingly left Xavi and Ivan Rakitic out of the starting lineup with Rafinha given a chance in the midfield.
Villarreal arrived on an 18-match unbeaten run and although they were pressed back with Barca's possession football they were a constant threat on the counter.
Barca didn't find it easy to breakdown Villarreal but their quality in attack eventually shone through.
Neymar was on target again after his double helped Barca knock Atletico Madrid out of the King's Cup last Wednesday and Messi crowned another dangerous performance with his 22nd league goal of the season.
"It is fantastic to have such dangerous players in attack and they (Neymar and Messi) are in special form at the moment," said Luis Enrique, who said he wasn't worried that Suarez continued to struggle in front of goal.
"He is fundamental and basic to the team. He is creating chances and although he isn't scoring he is going close. The goals will come in important games this season."