Posición de una subcadena
En «The kit parses logs: ERROR at line 12, then INFO, then ERROR again.» el primer ERROR está en el índice 21, línea 1, columna 22, y termina antes del 26. Los puntos y corchetes se buscan como texto normal. Gratis en su navegador.
- Gratis
- Funciona en su navegador
- Sin registro
- Sus datos no salen de su equipo
Ejecutar — gratis
Ejemplo resuelto
- Calcular
- ERROR
- Índice
- 21
- Inicio
- 0
- Longitud
- 67
- Longitud de la búsqueda
- 5
Localizar la primera aparición de una frase es el primer paso de casi cualquier pipeline de texto: usted sitúa un marcador y después recorta, analiza o resalta desde ese índice de caracteres. Esta herramienta de posición de subcadena toma su texto de origen y un término de búsqueda no vacío y devuelve el índice de caracteres con base cero de la primera coincidencia literal, además de si se encontró, el desplazamiento final exclusivo y la línea y columna con base uno para saltar al hallazgo en un editor. El start opcional permite reanudar tras una coincidencia previa. La coincidencia opcional sin mayúsculas cubre borradores mixtos. Los términos de búsqueda vacíos fallan con entrada inválida para que los trabajos masivos nunca traten la cadena vacía como coincidencia en cada desplazamiento.
Qué significa hallar la posición de una subcadena y cuándo usarla
Hallar la posición de una subcadena significa recorrer la cadena de origen de izquierda a derecha —o desde un desplazamiento start opcional—, detenerse en la primera coincidencia literal no solapada de un término de búsqueda e informar el índice de caracteres de ese hallazgo para que un paso posterior recorte, analice o resalte desde ahí.
La coincidencia es literal: si busca un punto, un paréntesis o un corchete, esos caracteres son texto plano, no sintaxis de expresión regular, de modo que la herramienta permanece predecible para no desarrolladores y para pipelines que no deben sorprenderse con caracteres especiales. Prefiera esta calculadora cuando la intención de búsqueda sea hallar la posición de una subcadena, el índice de una cadena, localizar la primera ocurrencia u obtener el desplazamiento de un token.
Las fuentes típicas incluyen líneas de registro donde necesita el primer marcador ERROR, fragmentos de configuración donde hay que hallar una clave antes de cortar un valor, HTML o markdown donde un delimitador de encabezado inicia una sección, y celdas CSV o TSV donde empieza un delimitador o un campo entre comillas. La coincidencia opcional sin distinción de mayúsculas pliega el caso de las letras para capturar el primer Hello, HELLO o hello sin listar variantes.
No use este producto cuando necesite reescribir la coincidencia —eso es una intención SEO distinta cubierta por herramientas de reemplazar la primera y de buscar y reemplazar— ni cuando necesite listar cada ocurrencia, grupos de captura, lookarounds o un motor regex multilínea.
Qué puede hacer con ella
Localizar el primer marcador de registro o error
Analizadores y herramientas de soporte hallan el primer ERROR, TODO o delimitador y después recortan o resaltan desde ese índice de caracteres sin reescribir el archivo.
Reanudar un recorrido tras un hallazgo previo
Envíe el end exclusivo anterior como start para recorrer la segunda ocurrencia y las posteriores una a una en plantillas, registros y archivos de configuración.
Preguntas frecuentes
¿El índice es con base cero o con base uno?
index es con base cero, el mismo contrato que String indexOf de JavaScript, de modo que puede pasarlo a slice. Cuando hay coincidencia, position es el número de carácter con base uno que se espera en un editor, y line y column también son con base uno.
¿Qué ocurre si el término de búsqueda está vacío?
Una cadena find vacía se rechaza para que los pipelines nunca traten la cadena vacía como coincidencia en cada desplazamiento; esos fallos no se cobran.
¿Es gratuita la herramienta de posición de una subcadena?
La herramienta del navegador se ejecuta gratis en su dispositivo.
¿Find admite expresiones regulares?
No. El término de búsqueda se trata siempre como cadena literal. Puntos, corchetes y otros metacaracteres de regex coinciden consigo mismos para que el comportamiento sea predecible en editores y trabajos masivos.
¿Cómo encuentro la segunda aparición?
Repita la búsqueda indicando como posición de inicio el final de la primera coincidencia, 26 en el ejemplo. La búsqueda empieza ahí y encuentra el siguiente ERROR sin volver a recorrer el principio del texto.
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/index-of \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"The kit parses logs: ERROR at line 12, then INFO, then ERROR again.","find":"ERROR"}'const res = await fetch("https://api.kit.forhosting.com/str/index-of", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "The kit parses logs: ERROR at line 12, then INFO, then ERROR again.",
"find": "ERROR"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/str/index-of",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "The kit parses logs: ERROR at line 12, then INFO, then ERROR again.",
"find": "ERROR"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/str/index-of", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"The kit parses logs: ERROR at line 12, then INFO, then ERROR again.","find":"ERROR"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"The kit parses logs: ERROR at line 12, then INFO, then ERROR again.","find":"ERROR"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/str/index-of", 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": "The kit parses logs: ERROR at line 12, then INFO, then ERROR again.",
"find": "ERROR"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "str.index_of",
"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.
Límites
max_chars | 100000 |
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
Qué significa hallar la posición de una subcadena y cuándo usarla
Un término de búsqueda vacío lanza invalid_input, lo que protege los trabajos masivos del error clásico de tratar la cadena vacía como coincidencia entre cada carácter.
Contrato de entrada, rechazo de búsqueda vacía y lectura de la respuesta
Cuando hay coincidencia la respuesta también incluye position como el índice humano con base uno, end como el desplazamiento final exclusivo, line y column como coordenadas de editor con base uno, y matched como el recorte exacto en el hallazgo para que una búsqueda sin mayúsculas siga mostrando la capitalización original. Una coincidencia ausente es un éxito válido: found es false e index es menos uno, el resultado honesto para un haystack que no contiene la aguja. Use index con slice cuando un script recorte el resto; use line y column cuando una interfaz deba desplazarse al hallazgo; use found solo cuando una puerta solo deba saber si el marcador existe. Envíe un cuerpo JSON con el campo de cadena obligatorio text fijado a la fuente que desea examinar y el campo de cadena obligatorio find fijado a un término de búsqueda no vacío. El start opcional vale cero por defecto y es el índice UTF-16 con base cero donde comienza el recorrido, de modo que puede reanudar tras un hallazgo previo sin volver a examinar el prefijo. case_insensitive opcional vale false por defecto para mayúsculas exactas; póngalo en true cuando el primer borrador de mayúsculas mixtas deba coincidir igual. Se aceptan alias para clientes antiguos: text también como input, value, s, content, source o haystack; find como search, needle, substring, query o pattern; start como from, from_index u offset; case_insensitive como ignore_case, ci o insensitive. Si falta text, falta find, hay un valor que no es cadena, un start negativo o no entero, o find es la cadena vacía, se lanza invalid_input con un mensaje que nombra el problema, y esos fallos no se cobran en la API prepago. La longitud se limita a cien mil caracteres para que los recorridos del navegador y del Worker queden acotados. En éxito la respuesta siempre incluye index como el desplazamiento de caracteres con base cero o menos uno si no hay ninguno, found como booleano, text y find tal como se aplicaron, start y case_insensitive tal como se usaron, length y find_length como longitudes en caracteres, y method siempre igual a index_of.
Uso de la API, precios, flujos de trabajo y límites prácticos
Llame a la herramienta gratuita en el navegador de posición de subcadena para comprobaciones de pegado, demos de clase, control de calidad de contenido y localización rápida sin instalar una utilidad de escritorio ni escribir fragmentos indexOf en cada lenguaje. Un flujo típico halla el primer marcador de sección, lee index y end y recorta el encabezado que sigue. Otro flujo recorre hallazgos sucesivos enviando el end anterior como el siguiente start, lo que localiza la segunda ocurrencia y las posteriores sin una herramienta de reemplazar todo. No espere omisión consciente de etiquetas HTML, campos de fusión de documentos estructurados, índices de clústeres de grafemas ni colación específica de locale más allá de la coincidencia estándar sin mayúsculas: esos son problemas distintos. Use la API prepago del KIT cuando un CMS, un trabajo ETL, un backend de formularios, un servicio de soporte, un analizador o un cliente móvil necesiten el mismo localizador bajo saldo a $0.002 por ítem correcto; los fallos de validación nunca consumen saldo tras el rechazo del motor. Combine este endpoint con reemplazar la primera cuando un paso posterior deba reescribir solo ese hallazgo, o con buscar y reemplazar cuando deba cambiar cada coincidencia, pero mantenga la posición de subcadena como landing propia para no mezclar la intención SEO con editores que mutan el texto. Los autores que envían SDK pueden documentar text y find como campos obligatorios y mostrar un origen con varias coincidencias donde solo se devuelve el primer índice más un ejemplo de error de find vacío para que los integradores vean ambos lados del contrato.
Casos de integración
QA y fixtures deterministas
Los arneses de prueba fijan index, found, line y column para que un refactor que pase a reemplazo, regex o coincidencia de find vacío falle la integración continua de inmediato.
Preguntas técnicas
¿Cómo hallo la posición de una subcadena?
Envíe JSON con text en su cadena de origen y find en un término de búsqueda no vacío. El index de la respuesta es el desplazamiento de caracteres con base cero de la primera coincidencia, o -1 si no hay ninguna. start y case_insensitive opcionales controlan dónde y cómo corre el recorrido.