Я не мог придумать ни одного общего подхода, который был бы полезен в любой ситуации, но - это регулярное выражение, которое выполняет то, что вы хотите: ( ?(\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
Шаблон повторяется три раза, так как максимумзначение в строке образца составляет 10 3 .Он не будет захватывать значения более высокого порядка, для этого вам нужно будет повторить шаблон ( ?(\d+))?
в соответствии с вашими потребностями (обратите внимание на ?
в конце, чтобы сделать шаблон необязательным, позволяя вам продолжать сопоставлять меньшие значения).
Для замены вы бы выбрали только внутренние группы захвата, которые в этом случае $2
, $4
и $6
, но если шаблон вырастет, вы продолжите идти к $8
, $10
и более.Затем вы вставляете точку в конце замены: $2$4$6.
и все.