Reading’s unbeaten run was broken as Josh Dasilva scored a brace to take Brentford to the top of the Championship table as the Bees struck two late goals to take the points.
The Royals were strong in the first-half and had a dserved lead after Joao scored from the spot after Josh Laurent was fouled.
But Brentford hit back quickly after Dasilva scored a stunner to level the game and found a winner in the 85th minute with a powerful strike from an Ivan Toney knockdown.
Both sides looked dangerous in an enthralling game until Toney then sealed the points as he gave the Bees a third in the 88th minute.
There were two notable absentees for Veljko Paunovic to contend with heading into a huge Championship clash as both John Swift and Yakou Meite missed out through injury.
Right-back Andy Yiadom returned to the starting eleven to make his first start since September, meanwhile former Royals academy graduate Tariqe Fosu featured in the starting line-up for the visitors.
The Bees came to the Madejski in fine form having not tasted defeat in their last 18 Championship matches to put them them in second places, six points above Reading prior to kick-off.
Reading showed the early attakcing intent in the amtch and won a penalty before a minute had even passed on the clock.
This was followed by another corner just moments later as Alfa Semedo looked lively down the right and forced another, but Brentford stayed organised from the set-pieces to clear.
A slick move down the right from Andy Rinomohta and Andy Yiadom won a third corner 10 minutes in, but Brentford survived the spell of early pressure.
The Bees were struggling to get forward early in the half as Michael Morrison kept a close eye on the league’s top scorer, Ivan Toney.
Having had control of the half, but without creating any clear cut chances, the Royals were given the chance to show for their domination when they were awarded a penalty kick in the 24th minute.
Michael Morrison found Ovie Ejaria on the left-wing with a brilliant diagonal long ball, he played the ball to Josh Laurent, who cut inside into the box and had his leg swiped from underneath him as he lined up to shoot and the referee had no hesitation in pointing to the spot.
Despite missing his last two penalties, Lucas Joao stepped up to the mark and found the net to bag his 16th Championship goal of the season. Brentford goalkeeper David Raya got a strong hand to the shot but couldn’t keep it out as it squirmed past him and into the bottom right corner to give the Royals a deserved lead.
Brentford came out in search of an equaliser and might have got it had Yiadom not made a superb interception to prevent Fosu’s cross from reaching Bryan Mbuemo in the middle, who was unmarked.
Omar Richards then got forward into the box and put an enticing ball across the face of goal, which somehow evaded everyone, including Joao who was the intended target.
Despite Reading’s impressive show, Brentford made the Royals pay by finding their clinical edge with their first sight of goal.
Josh Dasilva levelled the game with a moment of individual magic in the 36th minute as he broke into the box, cut onto his left foot and cracked a shot past a helpless Rafael into the top left corner.
Reading looked to seize control again and re-take the lead and they came close through Michael Olise in the 55th minute. He drove down the right-wing with purpose, and when his shot took a deflection , it had Raya scrambling but to his fortune fell just inches wide of the post.
Brentford made the first change of the game in the 63rd minute as Sergi Canos replaced Mbeumo.
Olise continued to venture forward to try and create and played the ball out wide for Richards, but with plenty of options awaiting a cross in the middle, the full-back blasted his cross over the heads of everyone.
But he redeemed himself at the other end of the pitch just moments later with a determined piece of defending to chase back and shield the ball to win a goal kick and stop a threatening Brentford attack.
The visitors came forward in search of a goal to go ahead and Dasilva slipped a through ball to try and find Toney in the box, but again Richards was alive to the danger to intercept.
Reading’s first change saw Sone Aluko replace Semedo in the 76th minute.
Dasilva broke free down the right again to try and hurt the Royals defence, but Morrison was perfectly placed to make a vital clearance with several Brentford bodies waiting to convert the ball from close range.
Brentford made Reading pay in the 85th minute as they found a decisive goal to take the points. Toney chested the ball down for Dasilva who fired a rocket into the roof of the net to give Rafael no chance from close range.
Brentford then put the game to bed in the 88th minute as Toney found the net after latching onto a rebound for his 23rd league goal of the season
Reading move down to fifth place after the defeat, while Brentford climb to the top of the table above Norwich City on goal difference.
The Royals host Millwall at the Madejski Stadium on Saturday.
Reading: Rafael, Yiadom, McIntyre, Morrison (c), Rinomhota, Laurent, Semedo, Ejaia, Olise, Joao
Subs: Southwood, Esteves, Holmes, Gibson, Tetek, Aluko, Onen, Camara, Baldock
Brentford: Raya, Dalsgaard, Pinnock, Sorensen, Henry, Janelt, Dasilva, Jensen, Mbuemo, Fosu, Toney
Subs: Daniels, Canos, Forss, Ghoddos, Reid, Roersley, Zamburek, Stevens, Gilbert
Goals: Lucas Joao 25′ (pen), Dasilva 36′, 85′, Toney 88′