使用纯JavaScript

时间:2018-08-06 11:58:58

标签: javascript regex

我想使用javascript正则表达式删除货币符号并用点替换数字逗号。 我有这样的价值;

199,00 kr

我想让它像 199.00

我使用了此脚本,但无法正常工作。

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

使用此功能,我可以删除货币,但也会使输出为 19900

我尝试过这种方式

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

但是它再次使输出为19900

请告知我我做错了。

6 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

您可能想按逗号分隔字符串,然后替换每个子字符串,然后按点连接,这样您就不会在替换期间删除逗号或点:

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

答案 2 :(得分:0)

您可以在捕获组中捕获数字,并将点和空格与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);

答案 3 :(得分:0)

我建议:

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

答案 4 :(得分:0)

此版本会扫描文本以查找类似于货币的任何内容,并在其上运行替换功能。

这很容易在以后的情况下进行修改。

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));

答案 5 :(得分:0)

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

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"