Какой вариант regex здесь используется?+−
Встроенный движок регулярных выражений JavaScript (тот, что стоит за RegExp и String.prototype.match/replace), поскольку всё здесь выполняется на стороне клиента в вашем браузере, а не на сервере. Он очень близок к PCRE, но имеет несколько отличий - например, поддержка lookbehind зависит от версии движка, а именованные группы используют синтаксис (?<имя>...).
Почему мой шаблон совпадает только один раз?+−
По умолчанию, без флага g (глобальный), regex останавливается после первого совпадения - это отражает реальное поведение RegExp.exec() и String.match() в JavaScript. Включите флаг g выше, чтобы находить все совпадения в тестовой строке, а не только первое.
В чём разница между (...) и (?:...)?+−
Оба группируют части шаблона, но только (...) - группа захвата - сохраняет найденное совпадение, чтобы вы могли ссылаться на него позже (как $1, $2, ... в замене или в списке групп совпадения). (?:...) - группа без захвата: она группирует и применяет квантификаторы, не сохраняя совпадение, что полезно, когда группировка нужна, а захваченный текст не важен.
Как работают именованные группы и замены $<имя>?+−
Напишите (?<имя>...) вместо (...), чтобы захватить группу под именем, а не просто номером. В режиме замены ссылайтесь на неё в тексте замены как $<имя> - например, (?<год>\d{4})-(?<месяц>\d{2}), заменённое на $<месяц>/$<год>, переставляет дату без необходимости запоминать номера групп.
В чём разница между жадным (greedy) и ленивым (lazy) квантификатором, например + и +??+−
Жадный квантификатор (+, *, {2,4}) захватывает как можно больше текста, а затем отступает, только если это нужно, чтобы совпала остальная часть шаблона. Ленивый квантификатор - тот же символ, за которым следует ? - наоборот, захватывает как можно меньше, расширяясь на один символ только при необходимости. Например, <.+> для <a><b> жадно совпадёт со всем <a><b>, а <.+?> лениво совпадёт только с <a>.
Что на самом деле проверяют опережающая и ретроспективная проверки (lookahead/lookbehind), если они не потребляют символы?+−
Они проверяют, встречается ли шаблон непосредственно перед или после текущей позиции, не включая его в само совпадение - так (?=...) и (?<=...) проверяют впереди/позади наличие чего-либо обязательного, а (?!...) и (?<!...) проверяют отсутствие этого. Поэтому можно использовать \d+(?=px), чтобы находить число только тогда, когда за ним следует «px», при этом само «px» никогда не появляется в найденном тексте.