The home side missed two early chances before the Hoops dominated possession, forcing Saints keeper Zander Clark into a series of saves in the second half before winger Forrest broke the deadlock in the 78th minute.
Weah, on for injured fellow substitute Odsonne Edouard, notched in the 89th minute to clinch the victory, with Hoops defender Kristoffer Ajer then sent off for preventing Saints substitute Callum Hendry as he made his way towards the opposition goal.
It was Celtic’s second win in four days over St Johnstone following their 2-0 victory at Parkhead on Wednesday night and it increased their points advantage over Old Firm rivals Rangers.
There was less than a minute played when Ajer required treatment after sustaining a knock to the face in an aerial challenge with former Celtic forward Tony Watt.
LATEST FOOTBALL NEWS
While Ajer was still on the sidelines, Matty Kennedy forced his way through the middle of the Celtic defence but his shot was blocked by Hoops keeper Scott Bain, with Danny Swanson unable to capitalise on the rebound.
Restored to their full complement of players, Celtic took control of the ball but the home side had another chance in the 12th minute when overlapping left-back Scott Tanser found Watt with a cut-back but his left-footed effort from 10 yards missed the target.
A last-gasp tackle by St Johnstone defender Jason Kerr on Hoops striker Oliver Burke, after the Perth side had got themselves into trouble with a slack Swanson pass-back, had the travelling support calling for a penalty but referee Willie Collum gave a goal kick.
The first half ended goalless with new signing Jeremy Toljan replacing right-back Mikael Lustig to make his debut for the start of the second period.
Clark made saves from Ajer’s deflected shot and Burke’s powerful drive as Celtic quickly re-established their dominance.
Saints, however, passed up another chance in the 52nd minute when Watt just missed a wonderful in-swinging cross from Kennedy to the back post.
Burke had another drive saved by Clark before he made way for Edouard with the keeper soon saving an effort from the French striker, after he had denied Hoops defender Jozo Simunovic.
A goalmouth melee in the 70th minutes from Forrest’s cross saw Clark foil Scott Sinclair with the McDiarmid Park side escaping when skipper Joe Shaughnessy got to the loose ball before Edouard a yard from goal.
The Frenchman was injured in his attempt to get the ball – he was taken away on a stretcher – and he was replaced by United States international Weah.
The reigning champions kept going and eventually scored in the 78th minute when Weah reached the byline and cut the ball back for Forrest, who got in front of Tanser to prod in from a yard out.
Forrest went off injured, leaving Celtic with 10 men, before Weah tapped in a cross from Callum McGregor to seal the win.
Celtic were further depleted when Ajer picked up his red card in added time for blocking Hendry, who had come on for debutant Sean Goss.