regexp для нахождения всего между <a> и </a> теги

Если вы хотите, чтобы путь был указан только в URL-адресе, укажите ссылку на путь с привязки, которую вы щелкнули. Вы также не должны использовать атрибуты для определения обработчика кликов.

$('a').on('click', function (evt) {
  evt.preventDefault()
  var path = hideref(this.pathname);
  console.log(path);
  //window.location.href = path;
});

function hideref(strUrl) {
  return "https://example.com/?q=" + encodeURIComponent(strUrl);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a href="https://example.com/post/1">link 1</a>

5
задан Wiktor Stribiżew 8 October 2019 в 23:37
поделиться

5 ответов

Стандартная правовая оговорка применяется: Парсинг HTML с регулярными выражениями не идеален. Успех зависит от отмеченности входа на познаковом уровне. Если Вы не можете гарантировать это, regex не сделает Правильную Вещь в какой-то момент.

Сказав, что:

<a\b[^>]*>(.*?)</a>   // match group one will contain the link text
15
ответ дан 18 December 2019 в 07:57
поделиться

Я - большой поклонник regexes, но это не правильное место для использования их.

Используйте реальный синтаксический анализатор HTML.

  • Ваш код будет более четким
  • Это, более вероятно, будет работать

Я Погугленный для синтаксического анализатора HTML PHP и найденный этим.

Если Вы знаете, что работаете с XHTML, то Вы могли использовать стандартный синтаксический анализатор XML PHP.

3
ответ дан 18 December 2019 в 07:57
поделиться

Regex, черная магия, снова :)

Я нашел один деликатный вопрос об общем regex. Там некоторые интересные ссылки, где Вы найдете очень общий regexpressions как Ваш.

Захват HTML-ТЭГОВ

<TAG\b [^>]> (.?) Проанализируйте это регулярное выражение с соответствиями RegexBuddy открытие и заключительная пара определенного HTML-тэга. Что-либо между тегами получено в первую обратную ссылку. Вопросительный знак в regex делает звезду ленивой, чтобы удостовериться, что это останавливается перед первым закрывающим тэгом, а не прежде чем последнее, как жадная звезда сделало бы. Этот regex не будет правильно соответствовать тегам, вложенным в себе, как в onetwoone.

<([A-Z][A-Z0-9]) \b [^>]> (.*?) Анализируют это регулярное выражение с RegexBuddy, будет соответствовать открытию и заключительной паре любого HTML-тэга. Обязательно выключите чувствительность к регистру. Ключ в этом решении является использованием обратной ссылки \1 в regex. Что-либо между тегами получено во вторую обратную ссылку. Это решение не будет также соответствовать тегам, вложенным в себе.

Иначе: Просмотрите эту ссылку: ключевое слово "ссылка". Существуют некоторые интересные подходы для фильтрации ссылок.

Я надеюсь, что это помогает :)

Удачи!

0
ответ дан 18 December 2019 в 07:57
поделиться
<a\s*(.*)\>(.*)</a>

<a href="http://www.stackoverflow.com">Go to stackoverflow.com</a>

1$ = href = "www.stackoverflow.com"

2$ = переходят к stackoverflow.com

Я ответил на подобный вопрос для разделения всего кроме теги здесь

2
ответ дан 18 December 2019 в 07:57
поделиться

Хорошо.. Используя регулярные выражения не прекрасно, но в жемчуге regexp,

m!<a .*?>(.*?)</a>!i

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

Ограничения:

  • Не обрабатывает несколько ссылок на одну строку
  • Не обрабатывает ссылки, пробегающиеся через несколько строк.
  • Будет также соответствовать на тегах привязки.

Вы могли работать вокруг этого путем присоединения ко всем строкам в одну строку и затем разделить ее на массив (или несколько строк), использование ссылки запускается как разделитель.

0
ответ дан 18 December 2019 в 07:57
поделиться
Другие вопросы по тегам:

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