¿Por qué (.*?) se agrupa en /({\/\* )?#if (.*?)( \*\/})?/ no captura process.env.MODE === "std" cuando se usa {/* #if process.env.MODE === "std" */} como entrada?
¿Soy consciente de eliminar ? de los trabajos del último grupo… dicho esto, es un requisito.
¿Es posible solucionar esto?
Si necesita tener un patrón opcional al final después de un patrón opcional (como .*? ), puede convertir el .*? patrón de puntos perezosos en una ficha codiciosa templada :
({\/\* )?#if ((?:(?! \*\/}).)*)( \*\/})?Vea la demostración de expresiones regulares .
El .*? se cambia a un patrón que coincide con cualquier carácter, cero o más, pero con tantas apariciones posibles, que no es un punto de partida de la secuencia de caracteres */} .
Detalles :
({\/\* )? - un Grupo 1 opcional: /* y espacio#if - una cadena #if((?:(?! \*\/}).)*) - Grupo 2: cualquier carácter que no sea un carácter de salto de línea, cero o más, pero tantas veces como sea posible, ese no es un punto de partida del */} secuencia de caracteres( \*\/})? - una cadena opcional del Grupo 3: */}elimine el '?' opcional desde el final de la expresión regular que hace que el último grupo sea opcional
debería ser
({\/\* )?#if (.*?)( \*\/})