我有以下值:
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实现这个表达式替换一步?
我想不出任何通用的方法,将在各种情况下是有用的,但就是完成你想要的正则表达式:( ?(\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.
,就是这样。
我不知道你使用的语言。
但在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)