![]() |
Регулярное выражение для поиска и замены в Telegram Instant View
Вложений: 1
Всем привет!
Хочу запилить Instant View для блога, сейчас открылось окно, когда можно добавлять свой домен. У них сейчас вторая версия IV, где считается невалидным HTML-кодом img вложенный в p, так: <p><img ...></p>. В первой версии такой проблемы не было. Я в регулярных выражениях не силен, тем более с кастомным парсером. Проблема У меня или WordPress или платформа Genesis именно такой код и создает. Например, для этой статьи я использую чистый HTML без <p>, а в F12 вижу Код:
<p> Код:
<p><img src="/blog/wp-content/uploads/blog-images/date-modified01.png" height="149" width="280" alt="PowerShell дата создания файла" /></p> Вырезать <p> и </p> в таких конструкциях как выше, т.е. получить заменой Код:
<img src="/blog/wp-content/uploads/blog-images/date-modified01.png" height="149" width="280" alt="PowerShell дата создания файла"> Документация (Из РФ может понадобиться прокси или VPN) Как я понимаю, можно использовать match или replace (чуть ниже на странице). Второй я использовал для других целей без регекспов, он работал. Тренироваться при наличии аккаунта ТГ можно тут https://instantview.telegram.org/my/ Надо скормить ему URL статьи. Там, конечно, страшненько все выглядит. Мой шаблон прикреплен. В текущем виде он выдает ошибку Код:
Element <img> is not supported in <p>: <img src="/blog/wp-content/uploads/blog-images/date-modified01.png" height="149" width="280" alt="PowerShell дата создания файла"/> P.S. Пошиковский регексп к их match не подошел Код:
<p>\s*(<img.+/?>)\s*</p> |
Не совсем понятно откуда будут поступать данные... допустим, что из файла...
Далее: а будет ли валидным например такой вариант: Код:
<p> Если строго по условиям из шапки, то: powershell Код:
(gc test.html -raw -enc utf8) -replace '<p>\s*(<img [^>]*>)\s*</p>','$1' |
Цитата:
Цитата:
Цитата:
Цитата:
Код:
@match("<p>\s*(<img [^>]*>)\s*</p>"): //p |
Цитата:
Тогда почему match? Ведь: Цитата:
Цитата:
Цитата:
И это: Цитата:
Вот это: Цитата:
Правда, eсть подозрение, что область поиска сводится не ко всей dom-структуре, а ограничивается конкретным элементом, описанным в xpath. Поэтому, необходимо расширить область поиска, т.е. указать надо не сам удаляемый элемент <p>, а родительский. Можно попробовать это проверить так: Код:
@match("<p>\s*(<img [^>]*>)\s*</p>", 0, "ims"): //div |
![]() Я проверил так Код:
#содержимое статьи Код:
#родительский элемент содержимого статьи |
Цитата:
не поддерживаются следующие конструкции Код:
\s - [ \t\n\r\f\v] Код:
\v Код:
@replace("<p[^>]*>[ \n\r\t\f]*(<img [^>]*>)[ \n\r\t\f]*</p>","$1","ims"): //div ЗЫ Проверил регулярки в Instant View. Да, этот вариант обязан работать правильно. |
YuS_2, спасибо. Регулярное выражение работает, но задачу не решает.
Если применять его к
Второе неочевидно. Картинка видна в левой панели (исходная статья). Если в правой панели навести курсор между абзацами, где она должна быть, то при корректном результате там видно Photo (иногда сразу сопровождается урлом картинки). В редакторе это можно проверить, сравнив с версией 1.0. Надо закомментировать добавленное регулярное выражение и новую версию в первой строке так: Код:
#~version: "2.0" В ТГ это можно проверить так: нажать View in Telegram в правом верхнем углу → отправить ссылку себе в ТГ в сохраненные → смотреть на смартфоне. В общем, это единственный нормальный способ просмотреть реальный IV. |
Цитата:
С наскока победить не получилось, надо читать мануалы на этот Instant View. Похоже с тегами регулярки напрямую не работают как с текстом... завтра попробую разобраться, что там к чему. Цитата:
|
Цитата:
Там есть еще https://instantview.telegram.org/docs#replace-tag но не похоже, что он принимает регэкспы. В примерах этого нет, и в лоб не прокатывает. Простая замена в нем работает у меня. Код:
@replace("Увеличить рисунок", ""): $main/p/a/text() Код:
<a href="..."><img src="..." /><br />Увеличить рисунок</a> |
Цитата:
А для решения проблемы, надо просто заменить тег <p> с дочерним элементом <img/> на тег <figure>. Сделать это можно, как раз, с помощью команды @replace_tag так: Код:
@replace_tag(<figure>): //p[child::img] Код:
<figure>: //p[img] |
YuS_2, спасибо, работает! Хехе, я стал жертвой неправильно поставленной задачи :)
|
Время: 08:15. |
Время: 08:15.
© OSzone.net 2001-