Заменить дефис тире - PullRequest
       1

Заменить дефис тире

0 голосов
/ 03 марта 2019

Заменить каждый.(точка) с - (дефис) за исключением случаев, когда точка окружена цифрами.Например: .a.b.1.2. должно стать -a-b-1.2-

Я попробовал код

/(^\.|\.$|\b\.\b)(?!\d\.\B)/gm

Заменить

-

Результат возвращен

Тест 8 /11: прочитайте описание задачи снова.Не трогайте ничего, что зажато между цифрами!

Как мне изменить Regex?

Regex demo

Ответы [ 2 ]

0 голосов
/ 03 марта 2019

Попробуйте это регулярное выражение:

(?<=\D|^)\.|\.(?=\D|$)

и замените на -.

Объяснение:

Существует только 4 случая, когда вы хотите сопоставить точку:

  • перед точкой стоит не цифра
  • точка является началом строки
  • после точки стоит не цифра
  • точка является концом строки

Регулярное выражение находит только все четыре случая.

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

Как предложил Revo вкомментарии, это можно упростить до:

(?<!\d)\.|\.(?!\d)

Если lookbehind не поддерживается вашим движком регулярных выражений, вы можете заменить их на группы:

(\D|^)\.|\.(\D|$)

и заменить на $1-$2.

0 голосов
/ 03 марта 2019

Вы можете использовать это

(?<!\d|\.)\.+|\.+(?!\d|\.)
  • (?<!\d|\.) - Отрицательный взгляд назад.проверить, что предыдущий символ не является цифрой
  • \. - Совпадения .
  • (?!\d|\.) - Отрицательный взгляд вперед, чтобы проверить, что следующий символ не является цифрой

Демо

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