regex 使用纯JavaScript删除货币符号并将逗号替换为点

332nm8kg  于 12个月前  发布在  Java
关注(0)|答案(7)|浏览(153)

我想删除货币符号,并取代逗号的数字与点使用JavaScript正则表达式。我有这样的价值;
199,00 kr
我想让它像199.00
我用了这个脚本,但它不工作的罚款。

val.replace(/[^\d]/g, '');

字符串
使用这个我能够删除货币,但它也使输出为19900
我试过这种方法

var val2 = val.replace(/,/g, '.')
var val2 = val2.replace(/[^\d]/g, '');


但是它的输出仍然是19900
请告诉我我做错了什么。

ukxgm1gy

ukxgm1gy1#

这种情况下最简单的正则表达式可以是:

'199,00 kr'.replace(/(\d+),(\d+).*/, '$1.$2')

字符串

sg2wtvxw

sg2wtvxw2#

我建议:

result = subject.replace(/(\d+),(\d+)[\s\S]*/g, "$1.$2");

字符串

gpnt7bae

gpnt7bae3#

你可能想用逗号分割字符串,然后替换每个子字符串,然后用点连接,这样你就不会在替换过程中删除逗号或点:

val.split(",").map(str => str.replace(/[^\d]/g, '')).join(".")

字符串

disho6za

disho6za4#

这个版本会扫描文本中任何看起来像货币的东西,然后在上面运行replacer函数。
对于未来的边缘情况,这很容易修改。

function fixPrices(txt) {
  return txt
    .replace(/\d*\,*\d* kr\b/igm, function(subject) {
      return subject
        .replace(",", '.')
        .replace("kr", '')
        .trim();
    });
}
//TEST
var txt = "Hej min is koster 199,00 kr, men er det ikke lidt meget?\nJeg syntes den b\u00F8r koste 20 kr, 20,5 kr eller bare ,5 kr!";
console.log(txt);
console.log(fixPrices(txt));

字符串

blmhpbnm

blmhpbnm5#

一个更灵活的替代方案(不处理+/-符号):

const extractNumber = s => s.replace(/\D+/g, m => m == ',' ? '.' : ''); 

console.log( extractNumber('199,00 kr') )        // "199.00"
console.log( extractNumber('199 kr') )           // "199"
console.log( extractNumber('123.456,00 kr') )    // "123456.00"

字符串

rqcrx0a6

rqcrx0a66#

您可以捕获捕获组中的数字,并匹配点和空格后跟kr。在开始和结束处使用word boundary\'b
在替换中使用组1,点,组2:$1.$2

var val2 = "199,00 kr";
val2 = val2.replace(/\b(\d+),(\d+)\s*kr\b/g, '$1.$2');
console.log(val2);

字符串

mbjcgjjk

mbjcgjjk7#

试试看npm库:

import currencyToFloat from 'currency-to-float';

const price = '199,99 kr';

const parsed = currencyToFloat(price);

console.log(parsed); // 199.99

字符串

相关问题