Extraer líneas con regex
En un registro con líneas INFO, WARN y ERROR, la expresión ^ERROR\b deja solo las 2 líneas de error de 4, sin cambios y en orden. Cada línea se evalúa por separado, así que un comodín nunca se extiende a la siguiente. Gratis en su navegador.
- Gratis
- Funciona en su navegador
- Sin registro
- Sus datos no salen de su equipo
Ejecutar — gratis
Ejemplo resuelto
- Patrón
- ^ERROR\b
- Resultado
- ERROR database unavailable ERROR request timed out
- Coincidencias
- 2
- Total de líneas
- 4
Extraiga las líneas que coincidan con una expresión regular cuando un registro extenso, informe, volcado de configuración o texto estructurado contenga mucha más información de la que necesita. Envíe el texto, un patrón regex de JavaScript y modificadores opcionales; la capacidad evalúa cada línea completa y devuelve solo las coincidencias en su orden original. Admite finales de línea LF, CRLF y CR, conserva el contenido de las líneas elegidas e informa tanto el total examinado como el número de coincidencias. El procesamiento es determinista y local, sin modelos ni dependencias de red.
Escriba un patrón para las líneas que realmente necesita
El patrón se aplica por separado a cada línea completa, por lo que los anclajes resultan especialmente útiles. Empiece con ^ cuando el elemento relevante deba aparecer al principio y termine con $ cuando importen los últimos caracteres. Por ejemplo, ^ERROR\b selecciona registros de error convencionales sin aceptar una etiqueta como ERRORS, mientras que \.csv$ conserva nombres de archivo con esa extensión.
Debe facilitar el código fuente de la expresión, no la notación entre barras: escriba ^WARN, no /^WARN/. Los modificadores opcionales de JavaScript se proporcionan aparte. El modificador i ignora diferencias entre mayúsculas y minúsculas; los demás conservan el significado estándar de JavaScript.
Cada línea elegida se devuelve sin cambios y mantiene su posición relativa. Las demás desaparecen, pero la herramienta no recorta, reescribe, ordena, elimina duplicados ni interpreta el contenido. Este contrato preciso favorece la automatización porque entrega un subconjunto previsible del origen, no un resumen que pueda perder pruebas importantes.
Filtre registros y texto estructurado sin alterar las pruebas
El filtrado por líneas encaja de forma natural con registros de aplicaciones, salidas de comandos, exportaciones delimitadas, informes de pruebas y archivos de configuración. Un especialista de soporte puede aislar identificadores de solicitud, códigos de estado o niveles de gravedad antes de adjuntar un extracto conciso a una incidencia. Un desarrollador puede conservar las aserciones fallidas de una ejecución extensa.
Una canalización operativa puede seleccionar registros cuyas marcas temporales, nombres de host o prefijos de componente respeten una convención conocida. Como la coincidencia se evalúa línea por línea, un comodín no invade por accidente el registro siguiente. Se reconocen límites LF, CRLF de Windows y CR independiente; el texto devuelto usa separadores LF estables para que las comparaciones posteriores funcionen igual en todas las plataformas.
Puede seleccionar líneas vacías expresamente con ^$. Un salto final se considera terminador y no otro registro vacío. Además del resultado unido, la respuesta ofrece una matriz de líneas seleccionadas y recuentos de coincidencias y líneas totales, útiles para scripts y comprobaciones sin otra fase de análisis.
Valide los patrones e integre el resultado con seguridad
La capacidad rechaza texto ausente o vacío, patrones ausentes o vacíos, modificadores no admitidos o repetidos, modos Unicode incompatibles y expresiones que el motor de JavaScript no puede compilar. Una respuesta correcta sin coincidencias sigue siendo útil: contiene un resultado vacío, una matriz de líneas vacía, un contador de coincidencias igual a cero y el número de líneas revisadas. El tamaño del texto y del patrón está limitado para mantener un uso previsible de memoria tanto en el ejecutor perimetral como en el navegador gratuito.
Antes de automatizar, pruebe una expresión nueva con muestras representativas, añada anclajes cuando el formato lo permita y evite repeticiones anidadas innecesariamente ambiguas. Sin red, azar, reloj ni modelo lingüístico, una misma entrada siempre genera la misma salida.
Qué puede hacer con ella
Aislar entradas de error
Conserve solo líneas que empiecen por una gravedad de error o contengan un identificador de solicitud antes de revisar una incidencia.
Seleccionar registros estructurados
Extraiga filas cuyos prefijos, estados, nombres de archivo o identificadores cumplan una expresión regular precisa.
Reducir la salida de pruebas
Mantenga aserciones fallidas y marcas de diagnóstico de una compilación extensa sin alterar su orden original.
Preguntas frecuentes
¿Debo incluir barras alrededor de la expresión regular?
No. Envíe solo el patrón, como ^ERROR\b. Coloque modificadores como i en el campo de modificadores.
¿El patrón se aplica a cada línea o al texto completo?
Se aplica de forma independiente a cada línea completa. Una línea se devuelve una sola vez si la expresión coincide en cualquier punto.
¿Se modifican las líneas coincidentes?
No. Se conservan sus caracteres y su orden. Solo los separadores del resultado unido se normalizan a LF.
¿Cuánto cuesta?
Puede ejecutar gratis el mismo filtrado determinista en el navegador.
¿Cómo hago que no distinga entre mayúsculas y minúsculas?
Añada la opción i, que se escribe aparte de la expresión. Con ella, ^error también conserva las líneas que empiezan por ERROR o Error. Las demás opciones habituales de las expresiones regulares mantienen su significado.
Herramientas relacionadas
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/str/extract-lines-matching \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"INFO server started\nERROR database unavailable\nWARN retrying\nERROR request timed out","pattern":"^ERROR\\b"}'const res = await fetch("https://api.kit.forhosting.com/str/extract-lines-matching", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "INFO server started\nERROR database unavailable\nWARN retrying\nERROR request timed out",
"pattern": "^ERROR\\b"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/str/extract-lines-matching",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "INFO server started\nERROR database unavailable\nWARN retrying\nERROR request timed out",
"pattern": "^ERROR\\b"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/str/extract-lines-matching", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"INFO server started\\nERROR database unavailable\\nWARN retrying\\nERROR request timed out","pattern":"^ERROR\\\\b"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"INFO server started\nERROR database unavailable\nWARN retrying\nERROR request timed out","pattern":"^ERROR\\b"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/str/extract-lines-matching", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"text": "INFO server started\nERROR database unavailable\nWARN retrying\nERROR request timed out",
"pattern": "^ERROR\\b"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "str.extract_lines_matching",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |
Notas técnicas
Use la herramienta del navegador para una revisión rápida o la API por $0.002 por solicitud correcta.
Valide los patrones e integre el resultado con seguridad
Esos casos devuelven invalid_input en lugar de producir silenciosamente un resultado vacío, de modo que un error tipográfico en una regla automática se distingue de un patrón válido sin coincidencias. Consuma la matriz cuando necesite JSON estructurado o el resultado unido para enviarlo a un archivo, una incidencia u otro comando. La automatización mediante API cuesta $0.002 por solicitud correcta y el navegador es gratuito.
Preguntas técnicas
¿Qué ocurre si ninguna línea coincide?
La solicitud termina correctamente con resultado y matriz vacíos, matched_count en cero y el valor total_lines de líneas examinadas.