Регулярное выражение для поиск товаров и их кол-во в тексте

Никак не могу придумать регулярку для поиск товаров в тексте.

Например:

 Нам нужно купить завтра к вечеру
 1. бананы 10 шт
 2. картошка 20 кг
 3. капуста 1кг
 ах да, а еще нужна 
 вода миниральная 5 л

В тексте товар всегда начинается с новой строки, и я могу каждую строку проверить на то - это товарная позиция или нет, но перед товаром может быть какое-то значение (чаще всего номер), а может и не быть. Оптимально высчитывать по еденице измерения. Вот только не пойму как сделать.


Ответы (1 шт):

Автор решения: UModeL

Под все случаи невозможно подстроится, но конкретно для вашего примера подойдёт следующее регулярное выражение:

/^(?:[^a-zа-яё]*)(?<good>[a-zа-яё ]+?\d+\s?(шт|кг|л))$/gim

Пример на JS:

let rExp = /^(?:[^a-zа-яё]*)(?<good>[a-zа-яё ]+?\d+\s?(шт|кг|л))$/gim;
let sTxt = `Нам нужно купить завтра к вечеру
 1. бананы 10 шт
 2. картошка 20 кг
 3. капуста 1кг
 ах да, а еще нужна 
 вода миниральная 5 л`;
 
console.log( [...sTxt.matchAll(rExp)].map(el => el.groups.good) );

→ Ссылка