ddimonn8080
@ddimonn8080

Что значит «.*?»?

Здравствуйте, есть выражение в js:
function isHTML(str) {
   return /<(br|img).*?>\b|<(a|div).*?<\/\2>/i.test(str);
}


< - это открывающая скобка тега
(br|img) - это то что идет сразу после открывающей скобки - название тега - либо br либо img
. - (десятичная точка) соответствует любому символу кроме переноса строки.
* - означает ноль или более вхождений предыдущего символа)
? - Означает «ноль или один». То же самое, что и {0,1}. По сути, делает символ необязательным.
> - это закрывающая скобка тега
То есть найдет одиночные теги br и img в которых после названия тега идет любой символ(.), в любом количестве(*), но при этом эти символы после названия тега не обязательны(?)

Во второй части ищет парные теги <a или div. Тут сначала и в конце все то же самое:
< - это открывающая скобка тега
(a|div) - это то что идет сразу после открывающей скобки - название тега - либо br либо img
. - (десятичная точка) соответствует любому символу кроме переноса строки.
* - означает ноль или более вхождений предыдущего символа)
? - Означает «ноль или один». То же самое, что и {0,1}. По сути, делает символ необязательным.

<\/\2 - что значит эта часть?

> - это закрывающая скобка тега

Спасибо.
  • Вопрос задан
  • 2232 просмотра
Решения вопроса 3
Вот здесь в сайдбаре есть подробные объяснения: https://regex101.com/r/ZREAov/1

.*?Эти символы нужно рассматривать вместе. Они означают "любой символ в любом количестве, но не жадно". В данном случае "не жадно" означает "пока не встретится >".

<\/\2Закрывающая скобка тега, слеш и значение из второй сохранённой группы. В данном случае - (a|div), если это значение содержалось в открывающем теге.

P.S. Если у вас этот JS исполняется в браузере, то гораздо правильнее использовать DOM API вместо регулярки (не знаю, может, его и в Node завезли).
Ответ написан
dimonchik2013
@dimonchik2013
non progredi est regredi
\1 \2 и т.п. это номер ранее совпавшего шаблона

выражение кривое т.к. br может не иметь открывающего тега, более того закрывающий для br часто пишут с пробелом
</ br>
подчеркивая этот момент

P.S xpath такое решается надежнее
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
<\/\2 - что значит эта часть?
< - открывающая скобка закрывающей секции одного тега
\/ - слэш (\ - символ экранирования)
\2 - вторая группа. в примере, это: a|div
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
Wanted. Санкт-Петербург
До 450 000 ₽
Wanted. Санкт-Петербург
До 120 000 ₽
Wanted. Санкт-Петербург
До 100 000 ₽