An absorbing clash between the two heavyweights saw the substitute save a point late on for the visitors, who stay a point behind in the standings but still hold a game in hand
A calamitous piece of defending by Leonardo Bonucci gifted Antonio Nocerino an opener in a first half dominated by the hosts, who also saw a Sulley Muntari goal questionably not given.
However, Juventus belatedly came alive in the second half, and an equaliser by substitute Matri seven minutes from the end salvaged a draw, as Arturo Vidal was also sent off in injury time for a reckless challenge.
Both sides were clearly not shying away from the occasion in the initial exchanges, with an open game in midfield developing thanks to some sloppy passing from the visitors.
Juve were soon made to pay for their carelessness on the ball, after a horror sequence from Bonucci a quarter of an hour in.
Under no pressure, the defender passed the ball straight to the opposition, allowing Nocerino time to stride forward and fire an effort from distance which deflected back off Bonucci, wrong footed Gianluigi Buffon and nestled into the back of the net.
Massimiliano Allegri’s men were in the ascendancy, and should have been 2-0 up after 25 minutes, but for a controversial incident which saw a legitimate goal not given.
Buffon initially did well to parry a header by Philippe Mexes from a corner, but hooked out Sulley Muntari’s rebound with the ball clearly over the line, sparking Milan celebrations.
However, referee Paolo Tagliavento did not signal, and play continued as Juventus immediately stormed down the pitch on the counterattack, with only the fingertips of Christian Abbiati denying Marcelo Estigarribia from range at the end of the move.
Milan were instantly back on the offensive though, as Robinho was put through on goal, but Buffon was quick off his line to thwart the Brazilian expertly from a one-on-one.
The home side were dictating the flow of the game, with Juventus struggling to shift the pressure away from their goal. Vidal and Mark Van Bommel both flashed efforts wide from outside the box as the half ended with Antonio Conte’s men on the ropes.
Milan continued to find space in and around the visitors’ back line coming out of the break, but lacked the cutting edge of the first half as Buffon remained relatively untroubled.
With the Milan offence seeming somewhat blunted, Juventus slowly grew the game, and increasingly looked to get shots in on goal as the match crossed the hour mark.
With 68 minutes gone, Andrea Pirlo fed the overlapping Giorgio Chiellini on the left, who in turn teed up Fabio Quagliarella for a shot that was saved superbly by the arm of Abbiati.
The visitors thought they had equalised with 10 minutes to go, but Alessandro Matri’s goal was chalked off for an offside on Mirko Vucinic, despite the Montenegrin appearing to be uninvolved in the passage of play.
Matri would get his leveller three minutes later though, after a mistake by Thiago Silva saw Juventus maintain possession and spread the ball wide to Pepe, who crossed for the substitute to volley home.
Conte’s men poured forward for a winner, but their endeavor was halted in the 89th minute after a dangerous challenge by Vidal on Van Bommel saw the Chilean receive a straight red card.
The hosts were unable to take advantage of their numerical superiority in the little time that remained, and both teams were forced to settle for a point after a captivating contest.
The result sees Milan move onto 51 points, and maintain their one point lead over Juventus. However, the Turin outfit has the advantage in the title race as they still hold a game in hand.