VANCOUVER -- Nicolas Deslauriers scored two goals, and 14 players had at least one point to help the Montreal Canadiens defeat the Vancouver Canucks 7-5 at Rogers Arena on Tuesday.
Jeff Petry, Daniel Carr and Phillip Danault each had a goal and an assist, and Paul Byron and Alex Galchenyuk also scored for the Canadiens (15-15-4), who won for the second time in their past six games (2-3-1).
Montreal had scored six goals in its past four games.
[WATCH: All Canadiens vs. Canucks highlights]
"I wasn't happy with the defensive part of our game, but I like the way we were a little more creative on the offensive side," Canadiens coach Claude Julien said.
Carey Price made 34 saves, including several tough stops early, for the Canadiens.
"He was really good tonight and those five goals are certainly not indicative of his game," Julien said. "It was more of a five-man unit, we weren't as solid as we should be defensively."
Thomas Vanek scored his 10th NHL hat trick and had four points for Vancouver. His third goal, with 1:01 left in the third period, cut the lead to 6-5, but Danault scored into an empty net with 11 seconds left.
Video: MTL@VAN: Vanek buries shot to complete hat trick
Daniel Sedin and Brock Boeser each had a goal and an assist, and Anders Nilsson made 25 saves for the Canucks (15-16-4), who are 1-6-0 in the past seven games.
"There's nothing sweet about it," Vanek said of his hat trick. "We're really struggling right now. We need points and tonight I thought we deserved at least a point. But again, we just gave up too many goals."
Petry scored the go-ahead goal on a screened, power-play shot from the point with 47 seconds left in the second period for a 4-3 lead, and Paul Byron scored 1:37 into the third to make it 5-3.
Video: MTL@VAN: Petry tallies PPG after faceoff win
"It wasn't the ideal way to win a game," Petry said. "It was a little bit back and forth but what I liked is when they capitalized and scored it seemed like we pushed back quickly and then found a way to score and get back on top."
Boeser, playing two days after crawling off the ice with a bone bruise in his ankle, scored his NHL rookie-leading 18th on a power play to make it 5-4 with 6:31 left. But Galchenyuk restored the two-goal lead on a 2-on-1 turned breakaway with 2:33 to play for a 6-4 Montreal advantage.
"We're scoring more goals and doing some other things right, but also we need to clean up some small areas," Boeser said. "We gave up too many odd-man rushes tonight."
After Vanek (11:37) and Carr (16:39) exchanged power-play goals in the first period, Deslauriers made it 2-1 at 7:18 of the second on a backdoor pass off the rush.
Vanek scored his second on a redirection at 14:00 to tie it 2-2, but Deslauriers scored his second at 17:05 on a 2-on-1 with Carr for a 3-2 Montreal lead.
Video: MTL@VAN: Carr nets fortuitous tip-in power-play goal
Sedin tied it 3-3 on a rebound 34 seconds later.
"We struggled early on in the year with giving up one and then another one quickly so our pushback tonight was good, but ideally you'd like to get those goals and keep the lead and not give up those goals right after," Petry said. "You don't want to get in a run-and-gun game, you want to play within your system, but right now it's just good to get the 'W'."
Goal of the game
Galchenyuk's goal with 2:33 left in the third period.
Video: MTL@VAN: Galchenyuk shows off hands to pad lead
Save of the game
Price's save on Boeser on a high one-timer with 1:17 left in the third period.
Video: MTL@VAN: Price turns away Boeser's late shot
Highlight of the game
Byron's goal 1:37 into the third period.
Video: MTL@VAN: Byron finishes his own play for 5-3 lead
They said it
"Those are the chances I need to capitalize on. I know I'm not here for my points and stats, but if I can contribute like this and take some pressure off our top line, it means a lot." -- Canadiens fourth-line left wing Nicolas Deslauriers
"We scored five goals, had almost 40 shots, scored five goals on a pretty good goalie, played a lot more aggressive, our compete level was a lot higher. I thought it was a step in the right direction." -- Canucks coach Travis Green
Need to know
Canucks forward Reid Boucher, who was called up from Utica in the American Hockey League after Boeser was injured, played on a line with Boeser. Nikolay Goldobin was a healthy scratch. … Canucks defenseman Erik Gudbranson, who missed 12 games with an upper-body injury, played 16:49 and had an assist for his first point of the season. … Canucks forward Henrik Sedin had two assists and has 13 in the past 10 games. … Petry played a game-high 25:20 and had three shots on goal, two hits and blocked two shots.
Canadiens: At the Calgary Flames on Friday (9 p.m. ET; SNW, TSN2, RDS, NHL.TV)
Canucks: At the San Jose Sharks on Thursday (10:30 p.m. ET; NBCSCA, SNP, NHL.TV)
Video: Canadiens edge Canucks in wild contest, 7-5