Использование REGEX для удаления последних ведущих нулей - PullRequest
0 голосов
/ 17 января 2020

Есть ли способ решить эту проблему, используя только REGEX?

У меня есть строка с, например, например: 123,40500 становится 123,405

123,000 становится 123

Зная, что мы можем использовать группы (то есть $1, $2, et c .. .), есть ли способ выполнить это преобразование только с чистым REGEX, без необходимости разбивать строку в ,?

Спасибо

Ответы [ 2 ]

2 голосов
/ 17 января 2020
  • Найти ^ ([0-9,] *?) (?:,? 0 +)? $
  • Группа 1 - результат.

Объяснение :

  1. ^ Соответствует началу строки.
  2. ([0-9,]*?) Группа захвата 1: минимальное совпадение цифр и запятых до следующих значений.
  3. (?:,0+)? При желании укажите необязательную запятую, за которой следует один или несколько нулей. Это обрабатывает случай, когда строка не имеет конечных нулей и ничего не нужно «заменять».
  4. $ Соответствует концу строки.

См. Regex демо

регулярное выражение заменит все конечные нули. Если строка, состоящая из 000, например, Группа 1, будет пустой строкой. Если вы действительно хотите оставить хотя бы один ноль, используйте:

^([0-9,]+?)(?:,?0+)?$

let tests = [
  '123,450',
  '123,40500',
  '123,000',
  '123',
  '000'
]

for (let test of tests) {
    test = test.match(/^([0-9,]+?)(?:,?0+)?$/)[1];
    console.log(test);
}
2 голосов
/ 17 января 2020

Удаляет конечные нули и запятую, если за ними следуют только нули.

  • Найти: ,?0+$
  • Заменить: NOTHING

Объяснение:

 ,?  # optional comma
 0+  # 1 or more zeros
 $   # end of line

Если вы хотите сопоставить все перед окончанием нулей, используйте:

^[\d,]+?(?=,?0+$)

Демонстрация и объяснение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...