В настоящее время я создаю JavaScript веб-скребок для продуктового магазина, который обрабатывает название продукта, а затем возвращает количество элементов, объем и цену за литр продукта. Большинство названий продуктов выглядят примерно так:
Кока-кола (ванильный ароматизатор) 12 x 330 мл
Чтобы получить метаданные об этом продукте, у меня есть написал регулярное выражение. Будет выполнен поиск границы слова, за которой следует число 1 или 2 ди git, пробел, строка «x», другой пробел и, наконец, число 1, 2 или 3 ди git:
const filter = new RegExp(/\b\d{1,2}\sx\s\d{1,3}/);
Затем я проверяю каждый результат на соответствие регулярному выражению, а затем вычисляю количество предметов, объем предметов, объем в литрах, а затем цену за литр.
if (result.title.match(filter)) {
result.itemCount = parseInt(result.title.match(/\d{1}\s/));
result.itemVolume = parseInt(result.title.match(/\d{2,3}\s/));
result.litreVolume = (result.itemCount * result.itemVolume) / 1000;
result.pricePerLitre = +(result.price / result.litreVolume).toFixed(2);
} else {
result.itemCount = 1;
result.itemVolume = parseInt(result.title.match(/\d{2,3}\s/));
result.litreVolume = result.itemVolume / 1000;
result.pricePerLitre = +(result.price / result.litreVolume).toFixed(2);
}
90% результатов выглядят хорошо, но иногда я получаю неожиданные результаты. Например:
- количество элементов NaN, что может быть связано с тем, что некоторые названия содержат еще несколько чисел ( Coca Cola (4-Way) 12 x 330 мл) )
- объем Бесконечности
- цена за литр, которая слишком высока
Очевидно, что я ошибаюсь с моим подходом к вычислению желаемого метаданные. Что было бы лучшим способом сделать расчеты с RegEx? Я что-то упустил, что сделало бы мои расчеты менее подверженными ошибкам?