Javascript 使用正则表达式查找体积和项目计数

Javascript 使用正则表达式查找体积和项目计数,javascript,regex,web-scraping,Javascript,Regex,Web Scraping,我目前正在为一家杂货店构建一个JavaScript web scraper,它处理产品的标题,然后返回每升产品的商品数量、数量和价格。大多数产品名称如下所示: 可口可乐香草香精12 x 330毫升 为了获得有关该产品的元数据,我编写了一个正则表达式。它将查找单词边界,后跟1或2位数字、空格、字符串“x”、另一个空格,最后是1、2或3位数字: const filter=new RegExp/\b\d{1,2}\sx\s\d{1,3}/; 然后,我测试每个结果是否与正则表达式匹配,然后计算物品数量、

我目前正在为一家杂货店构建一个JavaScript web scraper,它处理产品的标题,然后返回每升产品的商品数量、数量和价格。大多数产品名称如下所示:

可口可乐香草香精12 x 330毫升

为了获得有关该产品的元数据,我编写了一个正则表达式。它将查找单词边界,后跟1或2位数字、空格、字符串“x”、另一个空格,最后是1、2或3位数字:

const filter=new RegExp/\b\d{1,2}\sx\s\d{1,3}/; 然后,我测试每个结果是否与正则表达式匹配,然后计算物品数量、物品体积、体积(以升为单位),然后计算每升的价格

if result.title.matchfilter{ result.itemCount=parseIntresult.title.match/\d{1}\s/; result.itemVolume=parseIntresult.title.match/\d{2,3}\s/; result.litreVolume=result.itemCount*result.itemVolume/1000; result.priceperl=+result.price/result.litreVolume.toFixed2; }否则{ result.itemCount=1; result.itemVolume=parseIntresult.title.match/\d{2,3}\s/; result.litreVolume=result.itemVolume/1000; result.priceperl=+result.price/result.litreVolume.toFixed2; } 90%的结果看起来不错,但有时我会得到意想不到的结果。例如:

NaN的项目计数,可能与某些标题包含多个数字有关可口可乐4路12 x 330 mL 无限的体积 每升的价格太高了
显然,我在计算所需元数据的方法上犯了错误。使用正则表达式进行计算的更好方法是什么?我是否遗漏了一些使我的计算更不容易出错的内容?

如果我正确理解filter\b\d{1,2}\sx\s\d{1,3}工作,但您的子筛选器不\d{1}\s

我只习惯于在c中使用正则表达式,但我发现在java中也可以使用组。 将模式更改为\b\d{1,2}\sx\s\d{1,3}。当您在正则表达式中放入括号时,该部分将成为一个组,您可以随后访问该组

正如我所说,我已经有几年没有使用java了,但是我从web上选择了这个代码片段。它展示了如何在java中使用组。作为模式,您应该使用\b\d{1,2}\sx\s\d{1,3}。如果它与c中的相同,则整个结果为0,组1为第一个实际组,组2为第二个

// Create a Pattern object
Pattern r = Pattern.compile(pattern);

// Now create matcher object.
Matcher m = r.matcher(line);

if (m.find( )) {
System.out.println("Found value: " + m.group(0) );
System.out.println("Found value: " + m.group(1) );
}
我认为你可以用比上述更少的代码来编写它,但你明白了-