¿Qué variante de regex usa esto?+−
El motor de regex nativo de JavaScript (el que hay detrás de RegExp y String.prototype.match/replace), ya que todo aquí se ejecuta del lado del cliente en tu navegador en lugar de en un servidor. Es muy similar a PCRE pero tiene algunas diferencias: por ejemplo, la compatibilidad con lookbehind depende de la versión del motor, y los grupos con nombre usan la sintaxis (?<nombre>...).
¿Por qué mi patrón solo coincide una vez?+−
Por defecto, sin el indicador g (global), un regex se detiene después de su primera coincidencia; así se comportan realmente RegExp.exec() y String.match() en JavaScript. Activa el indicador g arriba para encontrar todas las coincidencias del texto de prueba en lugar de solo la primera.
¿Cuál es la diferencia entre (...) y (?:...)?+−
Ambos agrupan partes de un patrón, pero solo (...), un grupo de captura, guarda lo que coincidió para que puedas referenciarlo después (como $1, $2, ... en un reemplazo, o en la lista de grupos de la coincidencia). (?:...) es un grupo sin captura: agrupa y aplica cuantificadores sin conservar la coincidencia, útil cuando necesitas agrupar pero no te importa el texto capturado.
¿Cómo funcionan los grupos con nombre y los reemplazos $<nombre>?+−
Escribe (?<nombre>...) en lugar de (...) para capturar un grupo con un nombre en lugar de solo un número. En el modo Reemplazar, refiérete a él en el texto de reemplazo como $<nombre>. Por ejemplo, (?<anio>\d{4})-(?<mes>\d{2}) reemplazado por $<mes>/$<anio> reordena una fecha sin necesidad de recordar los números de grupo.
¿Cuál es la diferencia entre un cuantificador codicioso (greedy) y uno perezoso (lazy), como + frente a +??+−
Un cuantificador codicioso (+, *, {2,4}) coincide con todo lo que pueda, y solo retrocede si es necesario para que coincida el resto del patrón. Un cuantificador perezoso (el mismo símbolo seguido de ?), en cambio, coincide con lo menos posible y solo se amplía carácter a carácter cuando hace falta. Por ejemplo, <.+> frente a <a><b> coincide de forma codiciosa con todo <a><b>, mientras que <.+?> coincide de forma perezosa solo con <a>.
¿Qué comprueban realmente lookahead y lookbehind si no consumen ningún carácter?+−
Comprueban si un patrón aparece justo antes o después de la posición actual sin incluirlo en la coincidencia en sí; así, (?=...) y (?<=...) comprueban hacia adelante/atrás que algo debe estar presente, mientras que (?!...) y (?<!...) comprueban que no debe estarlo. Por eso puedes usar \d+(?=px) para hacer coincidir un número solo cuando va seguido de «px», aunque «px» en sí nunca aparece en el texto coincidente.