Pull to refresh

Набор регулярных выражений для MarkDown

Reading time 1 min
Views 9.7K
Добрый день, уважаемые пользователи Хабра.
В этом посте хотел бы поделиться тем, с чем игрался долго и надеюсь это будет кому-то полезным.

Недавно столкнулся с тем, что в новом проекте надо было сделать подсветку синтаксиса для языка разметки MarkDown. В последнее время он достаточно популярен в разных местах. Долго гуглил, в результате пришлось все писать самому и долго тестировать чтобы все работало правильно.
Под катом набор регулярных выражений, которые ищут основные элементы разметки MarkDown в варианте для Objective-c.


H1
^# (.)+$ // стандартный заголовок
^.+$\n^={3,}$ // заголовок с двойным подчеркиванием

H2
^#{2,2} (.)+$ // стандартный заголовок
^.+$\n^-{3,}$ // заголовок с одинарным подчеркиванием

H3… H6
^#{3,3} (.)+$  ... ^#{6,6} (.)+$

bold ( **Текст** )
(?<!\*|\\\*)\*{2,2}[^\*\n].+?[^\*]\*{2,2}(?!\*|\\)

italic ( *Текст* или _текст_ )
((?<!\*|\\)\*[^\*\n].+?[^\*|\\]\*(?!\*))|(_.+?_)

bold italic ( ***Текст*** )
(?<!\*|\\)\*{3,3}[^\*\n].+?[^\*|\\]\*{3,3}(?!\*)

monospace ( `текст` )
`[^`]*`

Numbered list
(^\d{1,3}\. .*$)+|(^ {1,10}\d{1,3}\. .*$)+

Unnumbered list
(^(\*|\+|-) .*$)+

image ![img alt](http://image.url/img.png)
!\[[^\[\]]*?\]\(.*?\)

url [ссылка](http://site.com/)
\[[^\[\]]*?\]\(.*?\)|^\[*?\]\(.*?\)

block quotes
^>{1,4} (.)+$


Здесь кусок скриншота из приложения, в котором эти регулярные выражения применялись.

image
Tags:
Hubs:
+17
Comments 17
Comments Comments 17

Articles