Bobrovsky, last season's Vezina Trophy winner, has started the last 16 games for the Blue Jackets and 23 of their last 24.
Johansen made rookie defenceman Jarred Tinordi pay for a giveaway at the Canadiens' blue-line. Johansen intercepted a weak pass and beat Price on a partial breakaway for his team-leading 27th goal of the year at 16:59 of the third period.
The Blue Jackets have now collected 15 out of a possible 20 points in their last 10 games (7-2-1). Columbus is holding on to the last wild card spot in the Eastern Conference, and will likely be in a tight playoff race until the end of the season.
Gallagher turned his stick into a baseball bat in the first, hitting a puck out of mid-air at 14:53 to give the Canadiens the 1-0 lead. After an initial save, Gallagher took a swing at a waist-high puck, which floated above the net, landed on Bobrovsky chest and trickled past the goal-line.
Columbus wasted no time finding their equalizer, scoring exactly one minute after the Canadiens. With the youngster Johansen in the box for cross checking, MacKenzie scored a short-handed goal right off the faceoff.
The Blue Jackets are now tied for third in the league with nine short-handed goals on the season.
The visitors took the lead at 6:53 of the second when Dubinsky put his 14th of the year past an off-balance Price.
After the Canadiens killed off three straight minor penalties to start the third, Vanek made it 2-2 at 7:46 with a slapshot from the face off circle to Bobrovsky's right.
Columbus finished 0 for 8 on the power play.
The Blue Jackets are fighting to make the playoffs for only the second time in the franchise's 14-year history. In 2009, Columbus was eliminated by the Detroit Red Wings in the Western Conference quarter-finals.
Notes: Brandon Prust (upper-body injury) was not in the lineup for the Canadiens. Prust was hurt in Tuesday's 6-3 win against the Colorado Avalanche. Ryan White got the start in his place. … RJ Umberger was a healthy scratch for the Blue Jackets. Rene Bourque and Douglas Murray sat out for the Canadiens. … Max Pacioretty hasn't scored in seven games, his longest goal drought since November. He's two goals shy of 100 with the Canadiens. … The Montreal Impact's Marco Di Vaio, Patrice Bernier and Justin Mapp were in attendance.