La route 158 commence à Lachute, à l'angle de l'Avenue Bethany, puis traverse Saint-Jérôme avant d'arriver à Saint-Esprit où elle forme un multiplex avec l'A-25 et la route 125 pour 2 kilomètres. Ensuite, à Joliette, elle devient une route à chaussées divisées jusqu'à la jonction avec la route 131. Cette section de la route 158 devait initialement faire partie de l'A-50; elle possède d'ailleurs un échangeur autoroutier complet avec l'A-31 à Joliette. Comme le projet de prolonger l'A-50 à l'est de Saint-Jérôme a été abandonné, le tronçon déjà construit fut attribué à la route 158. Plus à l'est, elle traverse Berthierville avant de se terminer à Saint-Ignace-de-Loyola, sur l'une des Îles de Sorel, tout juste à côté de la traverse reliant Saint-Ignace-de-Loyola et Sorel-Tracy. Elle était, dans l'ancien système de numérotation des routes, la route 41.
Depuis 2008, elle forme un multiplexe avec la route 148 entre son début à Lachute et la route Arthur-Sauvé à Mirabel. Les deux routes se divisent à l'intersection avec la route Arthur-Sauvé, que la route 148 emprunte afin de rejoindre Saint-Eustache.
À certains endroits entre Joliette et Saint-Jacques, on peut apercevoir de larges espacements entre la route 158 et les champs. Selon les tracés originaux, la route 158 devait être l'A-50. Avec l'abandon du projet, une seule chaussée à deux voies fut construite, mais une vue satellite, aux abords de l'échangeur avec l'A-31, permet de voir un début de dédoublement de voie pour une éventuelle autoroute avec voie de service[1].
Terminus ouest du multiplex avec l'A-25 / R-125; échangeur; sortie 46 de l'A-25; l'A-25 nord n'est pas indiquée au nord de la R-158 et la R-125 n'est pas indiquée au sud de la R-158