即使没有小数,也要使这个正则表达式适用于所有数字

时间:2016-06-14 08:42:49

标签: javascript jquery

我试图编写一个脚本,获取两个数字之间的负百分比数。因为一个数字是动态的,有不同的货币,小数等等我需要一个正则表达式。它几乎可以工作,但前两个数字只有在我给数字加上两位小数(.00)才有效。为什么是这样?

所有数字的输出应为33.

小提琴: JSFIDDLE

HTML:

ls -w 500

脚本:

<div class="left">
 <em class="price product-card-price">
    €1.000&nbsp;
    <span class="vatstatus">Exclusief BTW</span>
 </em>
 <em class="price product-card-price before">
    1500
 </em>
 <a class="pricebubble"></a>
</div>

<div class="left">
 <em class="price product-card-price">
    1&nbsp;000:-&nbsp;
    <span class="vatstatus">Exclusief BTW</span>
 </em>
 <em class="price product-card-price before">
    1500
 </em>
 <a class="pricebubble"></a>
</div>

<div class="left">
 <em class="price product-card-price">
    10,000.00SEK&nbsp;
    <span class="vatstatus">Exclusief BTW</span>
 </em>
 <em class="price product-card-price before">
    15000
 </em>
 <a class="pricebubble"></a>
</div>

<div class="left">
 <em class="price product-card-price">
    SEK10,000.00&nbsp;
    <span class="vatstatus">Exclusief BTW</span>
 </em>
 <em class="price product-card-price before">
    15000
 </em>
 <a class="pricebubble"></a>
</div>

1 个答案:

答案 0 :(得分:1)

问题是因为em中的.left具有相同的类,因此您需要在frstCol中获取两者的文本。您应该使用:first来限制选择器:

var frstCol = parseInt($(this).find('em.price.product-card-price:first').text().replace(/&nbsp;/g, '').replace(/[^0-9.]|\.(?=\d{3,})/g, "").replace(/(\.\d+)+/,''), 10);

Updated fiddle

另请注意,您可以稍微简化代码:

$('.left').each(function() {
    var frstCol = parseInt($(this).find('em.price.product-card-price:first').text().trim().replace(/[^0-9.]|\.(?=\d{3,})/g, ""), 10);
    var seCol = parseInt($(this).find('em.price.product-card-price.before').text().trim().replace(/[^0-9.]/g, ""), 10);
    var result = parseInt(100 - (frstCol / seCol) * 100, 10);
    $(this).find('a.pricebubble').text(result || 0);
});