polyanin
@polyanin
Golang, PHP & Symfony developer

Как заменить хештеги в html документе на ссылки, за исключением фрагментов исходного кода?

Приветствую!
Есть текст статьи в формате html
например:

65e1781948e62625932712.png

в котором могут быть прописаны хештеги, а также могут встречаться фрагменты исходного кода, также содержащие элементы, начинающиеся с #
Требуется заменить хештеги на ссылки везде, кроме фрагментов кода
В данном случае получается лишний хештег #39, возможны и другие варианты
p.s. вставил пример картинкой, т.к. при вставке кодом вырезает некоторые символы
  • Вопрос задан
  • 81 просмотр
Пригласить эксперта
Ответы на вопрос 2
IvanU7n
@IvanU7n
nothing interesting here
как-то так (не проверено и скорее всего не совсем оптимально; разбиение закрывающего code для сайта):
$text = preg_replace_callback('~<code[^>]*>.*?</'.'code>|#(\w+)~uim', fn($m) => $m[0][0] !== '#' ? $m[0] : "<a href=\"#{$m[1]}\">{$m[0]}</a>", $text);
Ответ написан
Комментировать
Anastasia2306
@Anastasia2306
PHP-разработчик.
Может так получится?

function replaceHashtagsWithLinks(html) {
  // Регулярное выражение для поиска хештегов
  const hashtagRegex = /(?<!\<code\>|\<pre\>)#\w+/g;

  // Функция для замены найденных хештегов на ссылки
  function replaceHashtagWithLink(match) {
    const hashtag = match.substring(1); // Убираем # из хештега
    return `<a href="https://example.com/hashtag/${hashtag}">${match}</a>`;
  }

  // Заменяем хештеги на ссылки
  const replacedHtml = html.replace(hashtagRegex, replaceHashtagWithLink);

  return replacedHtml;
}

const processedHtml = replaceHashtagsWithLinks(html);
console.log(processedHtml);


Ну а код статьи выглядел бы так:

<p>Это #хэштег в тексте, а это <code>#код</code>.</p>
  <pre>#Это тоже код</pre>
  <p>Другой #тег и другая жизнь</p>
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы