---
name: strip_ansi
kind: function
lang: go
domain: core
version: "1.0.0"
purity: pure
signature: "func StripANSI(s string) string"
description: "Elimina secuencias de escape ANSI/VT100 de un string y filtra caracteres de control no imprimibles, preservando \\n, \\t y \\r."
tags: ["terminal", "ansi", "string", "sanitize", "terminal-capture"]
uses_functions: []
uses_types: []
returns: []
returns_optional: false
error_type: ""
imports: ["regexp", "strings"]
params:
  - name: s
    desc: "String que puede contener secuencias de escape de terminal (CSI, OSC, escapes simples) y/o caracteres de control."
output: "String limpio: sin secuencias ANSI ni caracteres de control, preservando saltos de línea (\\n), tabulaciones (\\t) y retornos de carro (\\r)."
tested: true
tests:
  - "golden: color SGR codes"
  - "edge OSC titulo de ventana"
  - "edge movimientos de cursor"
  - "edge string sin escapes preserva saltos de linea"
  - "edge string vacio"
  - "edge preserva tabs"
test_file_path: "functions/core/strip_ansi_test.go"
file_path: "functions/core/strip_ansi.go"
---

## Ejemplo

```go
// Limpiar output de terminal con color rojo
raw := "\x1b[31mError:\x1b[0m archivo no encontrado"
clean := core.StripANSI(raw)
// clean == "Error: archivo no encontrado"

// Limpiar título de ventana OSC
raw2 := "\x1b]0;mi titulo\x07contenido real"
clean2 := core.StripANSI(raw2)
// clean2 == "contenido real"
```

## Cuando usarla

Cuando captures output de un PTY/TUI/subprocess y necesites texto plano: antes de indexar logs con ANSI en un buscador, antes de difar output de terminal, o cuando muestres salida de comando en un contexto sin soporte de escape (UI web, archivo, base de datos).

## Gotchas

- Preserva `\n`, `\t` y `\r` a propósito: el output de terminales suele tener CRLF y tabulaciones con semántica propia.
- Cubre CSI, OSC y escapes simples de dos caracteres. Secuencias DCS o PM (rarísimas) no se eliminan; si las necesitas, añade una regex adicional antes de llamar a esta función.
- Las regexes están precompiladas a nivel de paquete: no hay coste de compilación por llamada.
