Buscar subcadenas por valor
Una operación que tarde o temprano vas a realizar con las cadenas es buscar caracteres o plabras dentro de ellas. La búsqueda directa de subcadenas puede hacerse con varios métodos
- includes(): solo comprueba la exsistencia de una subcadena en el string
- endsWith() comrpueba usbcadena inicial del string
- startsWith() comprueba subcadena final del string
- indexOf(): dice el primer índice donde aparece
- lastIndexOf(): encuentra la última posición en que aparece
El primero de ellos, includes(sub), es un método lógico que simplemente comprueba si el texto pasado como argumento está en la cadena, pero no indica en que posición se encuentra. Lo que hace es un test de comparación.
var correo = "ana@example.com";
var valido;
valido = correo.includes('@example.com')
console.log("¿Dominio valido? "+ valido)
En ese ejemplo simplemente se comprueba si el email contiene la subcadena "@example.com".
Un poco más concreto son los métodos startsWith(sub, ini) y endsWith(sub, fin) que comprueban si la cadena comienza o finaliza con la subcadena buscada . Pueden llevar un segundo argumento para señalar desde que posicion se debe buscar.
var frase = "Ella está comiendo en el bar";
var esElla, enCasa;
esElla = frase.startsWith("Ella");
enCasa = frase.endsWith("casa");
console.log("¿Es ella? "+ esElla);
console.log("¿En casa? "+ enCasa)
Puede ser útil para comprobar sufijos y prefijos de palabras o de frases completas. Ambos admiten un segundo argumento para indicar el inicio de la búsqueda o el ultimo elemento de la búsqueda.
Si queremos saber donde se encuentra un determinado carácter subcadena debemos usar los métodos indexOf() y lastIndexOf().
Ambos necesitan como argumento el texto que se busca y aceptan un sgundo valor numérico para indicar desde que posición se quiere buscar, por defecto se busca en toda la cadena.
La difererencia entre ambos es que IndexOf() devuelve el índice de la primera posición del texto buscado y lastIndexOf() devuelve la última posición del texto buscado. Si no lo encuentra devuelve -1.
var dia = "Salida del sol 7:00,dia de sol, puesta del sol 20:00"
var sol1, sol2;
sol1 = dia.indexOf('sol');
sol2 = dia.lastIndexOf('sol');
console.log("Primera aparición "+sol1);
console.log("Ultima aparición "+sol2);
Es interesante también la opción de buscar desde una determinada posición
var frase = "Desde casa Juan respondió: Comeré en el bar"
var posIni, sale
posIni = frase.indexOf(':');
sale = dia.IndexOf('casa', posIni);
if (sale>=0)
console.log("casa "+sale);
else
console.log("Sale de casa");
En este ejemplo busca la palabra casa desde la posición de los dos puntos.
Estos métodos son útiles para buscar todos los índices de aparición de un texto en una frase:
var frase = "La casa de Juan es la 4, la casa de María es la 8, la casa de Ana es la 10"
var buscar ="casa";
var pos = 0, desde=0
do{
pos = frase.indexOf('casa', desde);
desde = pos + buscar.length
console.log(pos);
} while (pos>=0)
Este pequeño script usa un bucle para hacer sucesivas búsquedas siempre desde la posición final de la palabra encontrada. Devuelve todas las posiciones donde se encuentra la palabra "casa" dentro de la frase. Desafío: ¿serías capaz de evitar el -1 en la lista de posiciones?.