#regex
#регулярное выражение
Вопрос:
Я задавался вопросом об этом долгое, долгое время.
Примечание: это бесполезно в любом случае, если кто-то не считает его полезным… Но мне просто интересно, можете ли вы написать это регулярное выражение странным сложным способом:
/^(webp|p(?:ng|hotoshop))$/gm
Можете ли вы объединить два «p» для web’p и «p’ng / hotoshop?
Помните, что оно должно совпадать только:
webp
png
photoshop
Я просто не смог найти ничего, связанного с этим, и я понятия не имею, что нужно Google, чтобы узнать об этом.
Насколько я понимаю, это должно быть невозможно в регулярных выражениях, если только это не произойдет, конечно, приведенное ниже не произойдет, если вы не будете возиться со своими шрифтами, на самом деле:
Ответ №1:
В тех вариантах регулярных выражений, которые поддерживают условные конструкции регулярных выражений, вы можете использовать
^(web)?p(?(1)$|(?:ng|hotoshop))$
Смотрите Демонстрацию регулярных выражений.
Подробные сведения
^
— начало строки(web)?
— Группа 1 (необязательно): —web
строка, 1 или 0 разp
— ap
(?(1)$|(?:ng|hotoshop))
— Если группа 1 совпадает, сопоставьте конец строки, иначе, сопоставьтеng
илиhotoshop
$
— конца строки.