我需要从一个元素中获取价格并将其添加到另一个元素。
我正在使用它:
\$\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的$ value - 但我需要它才能以$ 1,000.00的价格工作
答案 0 :(得分:10)
将non-digit
和non-dot
符号替换为''
,然后应用parseFloat
:
var currencyValue = parseFloat("$1,000.50".replace(/[^\d\.]/g,''));
console.log( currencyValue ) ; //1000.5
更新:如果您的“HTML自动生成器”生成有效的货币字符串,那么
/\$\S+/g
regexp足以提取所有货币:
var currencies = $('#cartSummaryItem').text().match(/\$\S+/g); // ["$115.00"]
然后你可以将它们转换成数字来执行数学运算:
var currenciesAsNumbers = currencies.map( function(item){
return parseFloat( item.replace(/[^\d\.]/g,'') );
}); // [115]
答案 1 :(得分: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
答案 2 :(得分:1)
修改为以下内容:
\$(?:\d{1,3},)*\d+(?:\.\d+)?
或者
\$\d{1,3}(,\d{3})*(?:\.\d+)?
答案 3 :(得分: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'));
答案 4 :(得分:1)
可以轻松地删除$ currency货币符号以及逗号 使用此命令使用替换:[^ .0-9]
实现答案 5 :(得分:0)
我得到了这个:
^\d{1,3}(,\d{3})*(\.\d+)?$
仅匹配数字,不包括货币符号。