Foros del Web » Programando para Internet » Javascript »

En que posicion se hizo matching

Estas en el tema de En que posicion se hizo matching en el foro de Javascript en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 08/08/2005, 07:40
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
En que posicion se hizo matching

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=0a<q.lengtha++) {
        
//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.writequery ); 
La expresion regular busca una consonante seguida de una vocal en la palabra estereococo. El resultado es efectivamente, el esperado:
Cita:
te,re,co,co,2,4,7,7
En el matching se encuentra te-re-co-co. El penultimo "co" es estereococo, mientras que el ultimo es estereococo. 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?
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #2 (permalink)  
Antiguo 09/08/2005, 14:12
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Exactamente asi:

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
    //vamosPor lleva el control del indice desde el cual empezamos a buscar
    
for(var a=0vamosPor=0a<q.lengtha++) {
        var 
p=this.indexOf(q[a],vamosPor);
        var 
vamosPor=p+q[a].length;
        
devolver[devolver.length]=p;
    }
    return 
devolver;
}

document.writeln("estereococonudo<br>");
var 
query="estereococonudo".localizar("[^aeiou][aeiou]","gi");
document.writequery ); 
Imprimirá
Cita:
estereococonudo
te,re,co,co,nu,do,2,4,7,9,11,13
Como quería.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:42.