Нужен спец по регулярным выражениям в JS


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

  1. Определить, что ссылка не обрамлена тэгом a и добавить ее в виде ссылки с атрибутом href
  2. Определить, что ссылка на изображение не обрамлена тэгом img и добавить такой тэг с атрибудтом src.
  3. Понимать что указана ссылка на пользователя вида @captain и подменять ее ссылкой на страницу пользователя.
  4. Понимать что дана ссылка на статью в БЧ голос и преобразовывать ссылку на нее в нужный формат.
  5. Понимать, что дана ссылка на видео/аудио и вставлять соответствующий плеер.

Comments 6


По моему под все это есть библиотеки. Хотя не уверен, что 1 и 2 решаемы.

Остальные можно посмотреть в исходниках толстого.

Вот к примеру регулярка для пользователя и замена на линк

https://github.com/GolosChain/tolstoy/blob/master/shared/HtmlReady.js#L217

Ниже по тексту есть youtube и vimeo

20.05.2018 11:29
0

Я сильно не вникал, но толстый кажется парсит пост как html и проверяет каждый элемент получившейся структуры. То-есть в этом случае можно определить является это просто текстом или ссылкой, и если текст, и похож на url то заменить на ссылку <a href=">

20.05.2018 11:35
0

Спасибо, буду разбираться.

20.05.2018 13:24
0

Я не волшебник, я только учусь...
п.2
// убираем тэги картинок (приводим к единообразию без тэгов)
$patt="/<img src=['|\"]([\w\:\/\.]+)+['|\"][ \S]*>/i"; $repl="$1"; $text=preg_replace($patt, $repl, $text, -1);

// добавляем тэг
$patt="/(http[s]*:\/\/[\S\.\/]+(jpg|jpeg|tiff))/i"; $repl=""; $text=preg_replace($patt, $repl, $text, -1);

п.1 Практически также делается. Если надо, то нарисую.

Рисуется с помощью отличных инструментов:
Сначала здесь подбираем паттерн, который "вырежет" нужное.
http://uvsoftium.ru/php/regexp.php
Потом здесь подставляем и проверяем:
https://easyregexp.ru/constructor

21.05.2018 07:23
0

Благодарю

21.05.2018 17:12
0

@captain
п.1
// убираем тэги ссылок (приводим к единообразию без тэгов)
$patt="/(.+)<\/a>/iU"; $repl="$1 "; $text=preg_replace($patt, $repl, $text, -1); // добавляем тэг $patt="/[\s]+(http[s]*:\/\/.+)[\s]+/iU"; $repl="$1";

$text=preg_replace($patt, $repl, $text, -1);

п.3
// заменяем
$patt="/(@.+)[^\w]+/iU";

$repl="< a href=' https ://golos.io / $1'>$1< /a>";

$text=preg_replace($patt, $repl, $text, -1);

21.05.2018 13:43
0