JSFiddle - React, Tailwind, and code Playground
JavaScript
const decodeWeight = function (opis) {
var p = {
digit: '(\d+\.?\d*)',
cont: '(\/1\s(opak|pusz|but|szt)\.)',
unit: '(k?g|ml|l\b|szt\.)'
};
//regular expression
var bez = "^(1\\s(szt\\.|kg|l\\b)|100\\s(g|ml))(\\/1\\s(opak\\.|pusz\\.|but\\.|szt\\.|para))?\\s*$";
var comma1 = "^" + p.digit + "\\s" + p.unit + ",\\s" + p.digit + "\\s" + p.unit + p.cont + "\\s*$";
var comma2 = "^" + p.digit + "\\s" + p.unit + ",\\s" + p.digit + "\\s" + p.unit + ",\\s" + p.digit +"\\s" + p.unit + p.cont + "\\s*$";
var comma3 = "^" + p.digit + "\\s" + p.unit + ",\\s" + p.digit + "\\s" + p.unit + ",\\s" + p.digit +"\\s" + p.unit + ",\\s" + p.digit +"\\s" + p.unit + p.cont + "\\s*$";
var range = "^" + p.digit + "-" + p.digit + "\\s" + p.unit + p.cont + "\\s*$";
var one = "^" + p.digit + "\\s" + p.unit + p.cont + "\\s*$";
var desc = opis.replace(/(kostek|role?k(?:i|a)?|torebe?k(?:i|a)?|piramide?k(?:i|a)?)/g, "szt.");
desc = desc.replace(/(\d),(\d)/, "$1.$2");
desc = desc.replace(/(\d+)\sx\s(\d+\.?\d*)/g, function(str) {
return (Number(RegExp.$1) * Number(RegExp.$2)).toString();
});
var test = new RegExp(bez,"m").test(desc);
return test ? 'bingo' : 'dupa'
}
alert(decodeWeight('100szt, 2kg'));