正则表达式替换删除空格和逗号变化对期

问题描述 投票:2回答:2

我有以下值:

10 000,00
 10 000,00
750,00
 750,00
1 000 000,00
 1 000 000,00

和需要的结果如下:

10000.00
10000.00
750.00
750.00
1000000.00
1000000.00

我已经成功地做到这一点在2个步骤;首先用,,然后用正则表达式替换没有更换. [^0-9.]

我怎样才能在1实现这个表达式替换一步?

regex
2个回答
0
投票

我想不出任何通用的方法,将在各种情况下是有用的,但就是完成你想要的正则表达式:( ?(\d+))?( ?(\d+))?( ?(\d+)),

let string = `10 000,00
 10 000,00
750,00
 750,00
1 000 000,00
 1 000 000,00
 1,00
10,00`;
 
let result = string.replace(/( ?(\d+))?( ?(\d+))?( ?(\d+)),/g, '$2$4$6.');

console.log(result);

解释很简单(我只解释了最后一部分):

(        # Capturing group 
   ?     # Space (one or zero)
  (      # Nested capturing group
    \d+  # One or more digits
  )
)
,        # Captures a comma

该模式自身重复三次,因为样本串的最大值为103,不会捕捉更高阶值,对于你需要在月底根据您的需要重复模式( ?(\d+))?(注意?使模式可选,让您保持匹配更小的值)。

对于替换,你只选择内捕获组,在这种情况下是$2$4$6,但是,如果模式长大后你会继续前进,以$8$10而过。然后插入在更换结束点:$2$4$6.,就是这样。


0
投票

我不知道你使用的语言。

但在JS这可能与替代方法提供的回调函数来实现。

let str = `10 000,00
 10 000,00
750,00
 750,00
1 000 000,00
 1 000 000,00`
 
let op = str.replace(/( +)|(,)/g, function(match,g1,g2){
  if(g1 && g1.length){
    return ''
  } else {
    return '.'
  }
})

console.log(op)
© www.soinside.com 2019 - 2024. All rights reserved.