Capturas
Registra el texto y los límites de cada grupo durante backtracking.
Constrúyelo en tu lenguaje
El tester trata tu programa como una caja negra: sirve cualquier lenguaje. Estos son los más cómodos para este proyecto.
Grupos de Captura (Capture Groups)
Los paréntesis en expresiones regulares no solo agrupan sintácticamente, sino que también capturan el texto coincidente de cada par de paréntesis para su posterior extracción.
Modelo mental: Vector de capturas indexadas
Los grupos de captura se indexan según el orden en que abren sus paréntesis (:
- Para el patrón
(a+)(b)sobre"zaaab":- Coincidencia total en el texto:
"aaab"(span: [1, 5]). - Grupo 1 (
a+):"aaa". - Grupo 2 (
b):"b". groups: ["aaa", "b"].
- Coincidencia total en el texto:
Tu objetivo en esta etapa
Capturar las subcadenas correspondientes a cada grupo entre paréntesis y devolverlas en el arreglo groups.
Formato de Entrada
{
"op": "search",
"pattern": "(a+)(b)",
"text": "zaaab"
}
Formato de Salida
{
"matched": true,
"span": [1, 5],
"groups": ["aaa", "b"]
}
Qué debes hacer paso a paso
- Registra los inicios y fines de cada grupo:
- Durante la coincidencia, guarda el índice de inicio del texto cuando se entra a un
(y el índice final cuando se cierra).
- Durante la coincidencia, guarda el índice de inicio del texto cuando se entra a un
- Extrae las subcadenas:
- Al completar la coincidencia, extrae
text.slice(inicio, fin)para cada grupo en orden de aparición de sus paréntesis.
- Al completar la coincidencia, extrae
- Emite la salida: Escribe
{"matched": true, "span": span, "groups": groups}en stdout.
Criterios de aceptación
- ✅ Devuelve las subcadenas capturadas en
groups. - ✅ Preserva el orden posicional de los grupos según su paréntesis de apertura.
Formato de salida y errores
Los ejemplos multilínea se muestran así para facilitar la lectura. Emite JSON compacto, sin espacios opcionales, con las propiedades en el orden de los ejemplos de salida y un salto de línea final. No escribas logs en stdout. Las pruebas comparan texto exacto.
Para entradas inválidas, usa stderr con la palabra error, stdout vacío y código 1. Para entradas válidas, código 0. Usa números JSON enteros cuando el resultado sea entero.
Un grupo opcional que no participa se representa con null en groups. Un grupo que participa y captura cero caracteres se representa con "". Numera grupos por apertura, incluidos los anidados; si un grupo se repite, devuelve su última captura. Los intervalos son de inicio inclusivo y fin exclusivo.