Регулярное выражение для превращения дефисов в двойные дефисы - PullRequest
0 голосов
/ 20 июля 2010

Моя реализация уценки превращает двойные дефисы в endashes.Например, a - b становится a - b

Но иногда пользователи пишут a - b , имея в виду a -б * * +1010.Я хотел бы, чтобы регулярное выражение исправило это.

Очевидно, body.gsub(/ - /, " -- ") приходит на ум, но это портит неупорядоченные списки уценки - то есть, если строка начинается с - list item, она становится -- list item.Таким образом, решение должно заменять дефисы только тогда, когда слева от них находится символ слова

Ответы [ 2 ]

1 голос
/ 20 июля 2010

Возможно, если вы хотите быть немного более восприимчивым ...

gsub(/\b([ \t]+)-(?=[ \t]+)/, '\1--')

\ b [\ t] заставляет непустое пространство перед пробелом через граничное условие слова.Я не использую \ s, чтобы избежать бегов строк.Я также использую только один захват для сохранения предыдущего пробела (у Ruby 1.8.x есть ?<=?).

1 голос
/ 20 июля 2010

Вы можете сопоставить символ слова слева от дефиса и использовать обратную ссылку в строке замены, чтобы вернуть его:

body.gsub(/(\w) - /, '\1 -- ')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...