6

我需要从一个元素中获取价格并将其添加到另一个元素中。

我正在使用这个:

\$\d+(?:\.\d+)?

这似乎适用于$0.50, $1.00, $20.00$200.00但我撞到了一堵砖墙$1,000.00并获得了 10,000.00 美元

(不太可能$10,000.00会被使用)。

逗号让我绊倒了。

** 编辑 **

我离开了一个小时才回到一堆答案。在我浏览它们之前,我想我会澄清而不是回答所有评论:

正在使用的平台会自动生成购物车中商品的总价值。它在一个元素中呈现 - 这取决于用户是添加还是删除项目。

该值不太可能进入 10,000.00,因为产品成本并不高。

我是使用正则表达式的新手,我花了足够长的时间才走到这一步,因此提出了这个问题。

自动生成的 HTML:

<span vertical="False" quote="False" id="catCartSummary">
   <table cellspacing="0" class="cartSummaryTable">
     <tbody>
       <tr>
         <td class="cartSummaryItem">3 item(s), Total: $115.00 <a href="#" class="cartSummaryLink">View Cart</a></td>
       </tr>
     </tbody>
   </table>
</span>

在这种情况下,我只需要 $ 价值 $115.00 - 但我需要它以 $1,000.00 的价格工作

4

6 回答 6

11

non-digitnon-dotsimbols替换为'',然后应用parseFloat

var currencyValue = parseFloat("$1,000.50".replace(/[^\d\.]/g,''));

console.log( currencyValue ) ;   //1000.5

更新:如果您的“HTML 自动生成器”生成有效的货币字符串,那么

/\$\S+/g

正则表达式就足够了,用于提取所有货币:

var currencies = $('#cartSummaryItem').text().match(/\$\S+/g);    // ["$115.00"]

然后您可以将它们转换为数字以对它们进行数学运算:

var currenciesAsNumbers = currencies.map( function(item){
    return parseFloat( item.replace(/[^\d\.]/g,'') );
});    // [115]
于 2012-05-18T08:21:04.307 回答
2

这对我有用:

/\$\d+(,\d+)*(?:\.\d+)?/g

演示

我找到了一个优秀的正则表达式,它可以抓取每一种有效货币,并根据您的需要对其进行了一些定制:

/^\$[0-9]{1,3}(?:[0-9]*(?:[.,][0-9]{2})?|(?:,[0-9]{3})*(?:\.[0-9]{2})?|(?:\.[0-9]{3})*(?:,[0-9]{2})?)$/g

演示

正则表达式的来源

于 2012-05-18T08:16:55.817 回答
1

修改成这样的:

\$(?:\d{1,3},)*\d+(?:\.\d+)?

或这个

 \$\d{1,3}(,\d{3})*(?:\.\d+)?
于 2012-05-18T08:17:51.513 回答
1
var re = /^\d{1,3}(\,\d{3})*(?:\.\d+)?$/;

console.log(re.test('0.50'));
console.log(re.test('1'));
console.log(re.test('20.50'));
console.log(re.test('200.50'));
console.log(re.test('2,000'));
console.log(re.test('2,000.50'));
console.log(re.test('20,000'));
console.log(re.test('20,000.00'));
console.log(re.test('1,000,000'));
console.log(re.test('1,000,000.50'));
于 2012-05-18T08:19:38.593 回答
1

使用此 RegEx 替换,可以轻松地去除 $ 货币符号和逗号:[^.0-9]

此处提供演示: http ://rubular.com/r/Gwkx62RtLa

于 2013-07-21T04:00:57.537 回答
0

我得到了这个:

^\d{1,3}(,\d{3})*(\.\d+)?$

将仅匹配数字,不包括货币符号。

于 2012-05-18T08:18:31.427 回答