计算每份产品的价格

时间:2020-10-05 09:46:20

标签: jquery regex price

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

因此,想法是获取价格,然后将价格除以份数,即: 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>

1 个答案:

答案 0 :(得分:0)

您的逻辑差不多了,但是有三个问题。首先,您要替换价格字符串中的任何非数字字符,因此€49,90变为4990。因此,您需要将其除以100,才能将其从美分转换为欧元,以便在计算中使用该值。

第二,用于检索份数的Regex语法不正确。您需要声明不带括号且不尝试访问第0个元素的正则表达式。正则表达式本身不应该包含最后一个)值,因为您已经错过了“ servings”一词,这意味着它永远不会成功。

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

话虽如此,请尝试以下操作:

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>