Escape caracteres especiales de regex para una coincidencia literal
Haga que cualquier texto pueda insertarse sin riesgo en una expresión regular: invoice.total [draft]? se convierte en invoice\.total \[draft\]\?, de modo que el punto, los corchetes y la interrogación se buscan tal cual en vez de actuar como instrucciones. Gratis en su navegador.
- Gratis
- Funciona en su navegador
- Sin registro
- Sus datos no salen de su equipo
Ejecutar — gratis
El texto literal no siempre se puede insertar directamente en una expresión regular. Caracteres como el punto, el signo de interrogación, los corchetes o la barra inversa son instrucciones de la sintaxis regex, por lo que un valor sin escapar puede coincidir con otro texto o incluso invalidar el patrón. Esta capacidad convierte una cadena en un fragmento de patrón ECMAScript que trata cada metacarácter regex de forma literal. Resulta útil cuando términos de búsqueda, nombres de archivo, identificadores, etiquetas u otros valores proporcionados por usuarios deben formar parte de una expresión regular sin cambiar su significado.
Convierta texto literal en un fragmento de patrón seguro
Envíe en el campo text el valor exacto que desea que coincida con una expresión regular. El resultado contiene escaped, un fragmento de patrón en el que cada metacarácter de regex ECMAScript lleva delante una barra inversa. Las letras, los dígitos, los espacios, la puntuación sin significado regex, los saltos de línea y los caracteres Unicode se conservan sin cambios.
Por ejemplo, un punto normalmente representa cualquier carácter en una expresión regular, mientras que un punto escapado representa un punto real. Los paréntesis suelen crear un grupo; los corchetes abren una clase de caracteres; las llaves pueden introducir una cantidad de repeticiones; y los signos de interrogación o asteriscos controlan la repetición. Escapar esos símbolos conserva el significado literal del valor original.
El fragmento devuelto no incluye delimitadores de barra ni indicadores, por lo que puede pasarlo directamente al constructor RegExp, incorporarlo en un patrón mayor o guardarlo como cuerpo del patrón. Una cadena vacía es válida y produce un valor escaped vacío porque no hay caracteres que transformar.
Combine el valor escapado con sintaxis regex deliberada
El escape resulta especialmente útil cuando una parte del patrón procede de datos y otra parte se escribe intencionadamente como sintaxis regex. Suponga que una aplicación debe encontrar al principio de una línea un código de producto proporcionado por un usuario. Escape primero el código y después añada usted el ancla inicial y cualquier lógica de límites que necesite.
Esta separación mantiene la estructura confiable del patrón diferenciada del contenido literal. No escape un patrón completo después de componerlo, porque también neutralizaría las anclas, los grupos, las alternativas o los cuantificadores que quería mantener activos. La salida está destinada al cuerpo de un patrón ECMAScript, no a la notación del código fuente de JavaScript.
Esta diferencia importa: las barras no son especiales para el constructor RegExp y por eso se conservan. Si introduce el resultado en un literal regex delimitado por barras dentro de código JavaScript generado, el escape del delimitador a nivel de código fuente es una cuestión aparte. En código de aplicación habitual, es preferible pasar la cadena escapada a new RegExp junto con los indicadores elegidos por separado.
Conozca la garantía y valide el diseño circundante
La transformación es determinista y lineal: examina la cadena suministrada y antepone una barra inversa a los caracteres que controlan la sintaxis de las expresiones regulares ECMAScript. No utiliza la red, no ejecuta la expresión resultante, no elige indicadores, no añade anclas ni decide si la coincidencia debe distinguir mayúsculas de minúsculas. Esas decisiones corresponden a la aplicación, ya que cambian el comportamiento de la coincidencia y no la seguridad literal.
Cada formato tiene sus propias reglas de escape, y combinarlas con el escape regex exige aplicar cada capa en el límite correcto. Después de componer el patrón, pruebe la expresión completa con ejemplos representativos que deban coincidir y que no deban hacerlo, sobre todo cuando añada secciones opcionales o alternativas alrededor del fragmento escapado.
Qué puede hacer con ella
Cree una búsqueda literal
Convierta un término de búsqueda en un fragmento seguro para regex antes de añadir anclas o indicadores intencionados.
Busque nombres de archivo e identificadores
Conserve puntos, corchetes, paréntesis, signos más y otros caracteres de sintaxis dentro de valores exactos.
Proteja la composición dinámica de patrones
Mantenga literal el texto proporcionado por usuarios mientras el código confiable aporta la estructura regex circundante.
Preguntas frecuentes
¿Qué caracteres se escapan?
La salida escapa la barra inversa, el acento circunflejo, el signo de dólar, el punto, la barra vertical, el signo de interrogación, el asterisco, el signo más, los paréntesis, los corchetes y las llaves.
¿La salida incluye delimitadores regex?
No. El valor escapado es un cuerpo o fragmento de patrón ECMAScript sin barras delimitadoras alrededor.
¿Por qué no se escapa una barra?
Una barra no es especial dentro de un patrón ECMAScript pasado al constructor RegExp. Escapar un delimitador regex del código fuente es una tarea diferente al generar JavaScript.
¿Puedo añadir anclas o indicadores?
Sí. Añada sintaxis regex deliberada alrededor del fragmento escapado y proporcione los indicadores por separado al construir la expresión regular completa.
¿Qué ocurre con una cadena vacía?
Se acepta y devuelve un valor escaped vacío, que representa un literal de longitud cero.
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/dev2/regex-special-char-escape \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"invoice.total (USD) [draft]?"}'const res = await fetch("https://api.kit.forhosting.com/dev2/regex-special-char-escape", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "invoice.total (USD) [draft]?"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev2/regex-special-char-escape",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "invoice.total (USD) [draft]?"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev2/regex-special-char-escape", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"invoice.total (USD) [draft]?"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"invoice.total (USD) [draft]?"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev2/regex-special-char-escape", 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": "invoice.total (USD) [draft]?"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev2.regex_special_char_escape",
"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
Conozca la garantía y valide el diseño circundante
La capacidad tampoco prepara un valor para un literal de cadena de un lenguaje de programación, un documento JSON, un comando de shell, un atributo HTML o una URL. Las entradas que no sean cadenas se rechazan con un error invalid_input en vez de convertirse, lo que evita que números, matrices, objetos, null o valores booleanos se transformen silenciosamente en texto inesperado. Las solicitudes de API usan el precio base publicado de $0.002.
Preguntas técnicas
¿Qué ocurre si text no es una cadena?
La solicitud falla con un error invalid_input. Los valores no se convierten implícitamente.
¿Cuánto cuesta una solicitud de API?
El precio base de la API es de $0.002 por solicitud, y la misma operación determinista también puede ejecutarse en el navegador.