计算每份产品的价格

问题描述 投票:0回答:1

您好,我正在尝试创建一个计算,以根据产品的价格(以欧元为单位并用逗号分隔)以及括号中的您可以从中获得的份数来获取每份的价格。

所以我们的想法是获取价格,然后将价格除以份数,即: 49,90 / 14 = 3.56

下面是我的代码。请注意,我无法移动任何代码,这就是它在网站上的显示方式。

对此有任何帮助,我们将不胜感激。

function getDiscount() {
  var pattern = /[^0-9\.]/g;
  var pattern2 = (/\(*(\d+.\d+)\)/)[0];
  var price = parseFloat($(".from_price").text().replace(pattern, ""));
  var serving = parseFloat($(".servingScoop").text().match(pattern2).join().replace(pattern, ""));
  var pricePerScroop = (Math.abs(price/serving));
  $("#discount").html("€" + pricePerScroop.toFixed(2));
  $(".scoop").click(getDiscount);

}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="from_price">&euro;49,90</div>
<div class="servingScoop">100 grams (14 servings) </div>
<button type="button" onclick="getDiscount()">get discount</button>
<div id="discount"></div>

jquery regex
1个回答
0
投票

你的逻辑差不多了,但有三个问题。首先,您要替换价格字符串中的任何非数字字符,因此

€49,90
变为
4990
。因此,您需要将其除以 100,将其从美分转换为欧元,才能在计算中使用该值。

其次,用于检索份数的正则表达式语法不正确。您需要声明不带括号的正则表达式,并且不尝试访问第 0 个元素。正则表达式本身不应包含最后一个

)
值,因为您错过了“份量”一词,这意味着它永远不会命中。

最后,当您使用该正则表达式时,您只需要获取第一个匹配项,而不是获取所有匹配项并加入/替换它们。

综上所述,试试这个:

jQuery($ => {
  $('button').on('click', () => {
    var pattern = /[^0-9\.]/g;
    var pattern2 = /\((\d+)/;
    var price = parseFloat($(".from_price").text().replace(pattern, "")) / 100;
    var serving = parseFloat($(".servingScoop").text().match(pattern2)[1]);
    var pricePerScroop = Math.abs(price / serving);
    $("#discount").html("&euro;" + pricePerScroop.toFixed(2));
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="from_price">&euro;49,90</div>
<div class="servingScoop">100 grams (14 servings)</div>
<button type="button">get discount</button>
<div id="discount"></div>

© www.soinside.com 2019 - 2024. All rights reserved.