Mi problema viene de otro proyecto. En una cadena hago un match con una expresion regular. El match lo unico que me devuelve son las incidencias, pero no me dice dónde estan esas incidencias. Lo que quería es averiguar ese indice. Lo que ocurre es que haciendo un ".search" me devuelve la posición de la
primera incidencia del argumento, y no tiene porqué ser esa la que se hizo matching.
Veamos, tengo este código:
Código PHP:
String.prototype.localizar=function(expReg,modif) {
expReg=new RegExp(expReg ,modif);
//hacemos el match
var q=this.match(expReg);
//este sera el array con el que hagamos return
devolver=new Array();
//añadimos a devolver todos los elementos del match (todas las incidencias)
devolver[devolver.length]=q;
//por cada incidencia, añadimos a devolver su posicion
for(var a=0; a<q.length; a++) {
//en esta linea es en la que falla
var p=this.search(q[a]);
devolver[devolver.length]=p;
}
return devolver;
}
var query="estereococo".localizar("[^aeiou][aeiou]","gi");
document.write( query );
La expresion regular busca una consonante seguida de una vocal en la palabra estereococo. El resultado es efectivamente, el esperado:
En el matching se encuentra te-re-co-co. El penultimo "co" es estereo
coco, mientras que el ultimo es estereoco
co. Pero claro, el search no los diferencia, busca la
primera incidencia de "co" en estereococo, y la primera vez lo hace según lo que quiero: devuelve la posicion 7. Pero la segunda vez debería devolver 9, porque el segundo "co" esta en la posición 9.
¿Como puedo resolver esto? Sé que si en el search no utilizo expresiones regulares (como es el caso) es lo mismo que utilizar indexOf. indexOf tiene un segundo argumento que me ayudaría a determinarle desde dónde buscar, para que localize "co" desde la posición que yo quiero, pero no me ha salido.
¿A alguien se le ocurre como solventarlo?