Chasing 190 to win, West Indies finished on 169-8, with Shimron Hetmyer top-scoring with 81 not out and three bowlers taking two wickets apiece.
Earlier, Sri Lanka made 189-3 with Charith Asalanka making 68 from 41 balls and Pathum Nissanaka 51.
It leaves England, Australia and South Africa fighting to progress in Group 1.
Australia beat Bangladesh by eight wickets in Thursday’s first game to move into second spot. They will likely qualify if they beat West Indies on Saturday, but South Africa could progress if they beat England and overtake Australia on net run-rate.
England can still be eliminated but it would take a massive defeat for that to happen.
When Sri Lanka visited England for a white-ball tour in the summer, their batting was abysmal and coach Mickey Arthur spent most of the tour shaking his head and visibly storming around the dressing room area.
This latest batting effort left him with a beaming smile in the dugout.
In Nissanka, 23, and Asalanka, 24, they have two young batters who appear to have extremely bright futures.
They were happy to rotate the strike and punish the bad balls initially before Nissanka’s innovation came to the fore when first he switch-hit over the off side, then shuffled around the crease to flick through square leg.
His third half-century of the tournament was well built and allowed Asalanka, who is naturally more attacking, to drive through the covers and down the ground with disdain.
Their partnership, which was 91 off 61 balls, gave Sri Lanka a platform and Dasun Shanaka capitalised with his 14-ball 25 as they powered their way to the joint third-highest score of this World Cup.
They were also tidy with the ball and in the field and with another World Cup in Australia in 12 months’ time, they are a side to keep an eye on. (Courtesy BBC)