Walker Duehr scored his first NHL goal, and Elias Lindholm and Tyler Toffoli each had two assists for Calgary (20-14-9), which is 1-0-2 to begin a five-game road trip.
Dan Vladar made 25 saves in his first start since Dec. 28. He is 6-0-2 in his past eight starts.
"You need saves. That's the way the League is, big saves and timely goals, and our team … is not, like, an explosive team," Flames coach Darryl Sutter said. "We all got to play the same way to give ourselves a chance to win."
Jake Neighbours scored, and Thomas Greiss made 36 saves for St. Louis (21-19-3), which won its previous two games, including a 4-3 overtime victory against Calgary on Tuesday.
"I think we couldn't get our forecheck going, couldn't stop them from breaking out pucks," Neighbours said. "Obviously a few costly mistakes end up in the back of your net. Obviously, you'd like the game to swing in a different way after that one. We just couldn't get her going."
Duehr gave the Flames a 1-0 lead at 15:24 of the second period, scoring on a quick shot from the right face-off circle after receiving a pass from Nazem Kadri.
"Yeah, I think I blacked out," Duehr said. "It was a pretty cool feeling and something you dream of, so it was pretty cool."