Regex Заменить, чтобы удалить пробелы и заменить запятую на период - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть следующие значения:

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 шаг замены регулярного выражения?

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Я не мог придумать ни одного общего подхода, который был бы полезен в любой ситуации, но - это регулярное выражение, которое выполняет то, что вы хотите: ( ?(\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. и все.

0 голосов
/ 07 февраля 2019

Я не уверен, какой язык вы используете.

Но в 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...