Hola
estoy trabajando con expresiones regulares y queria detectar en una cadena tipo
http://www.google.com/?url=http://www.dot.tk/?url=http://www.fin.com
el ultimo http:... es decir http://www.fin.com
Tenia la expresion regular
Código PHP:
/https?(:|%3a)(/|%2f)(/|%2f)/
pero eso se queda en el primer http y no en el ultimo
asi que cree esta funcion:
Código PHP:
var getRegExpDerecha = function(regExpStr) {
return (regExpStr==null || regExpStr.length==0)?null:new RegExp(regExpStr+"(?!=.*"+regExpStr+".*)","i");
}
a la que le paso por parametro "https?(:|%3a)(\\/|%2f)(\\/|%2f)"
con la idea que "(?!="... X(?!=Y) captura X cuando no le sigue Y
sin embargo sigue devolviendome el primer http en vez del ultimo
finalmente he hecho esta funcion:
Código PHP:
var matchDerechaIndex = function (str,expReg) {
if (str==null || expReg==null) return -1;
var _index=0;
var _match;
var strAux=str;
while ((_match=strAux.match(expReg))!=null) {
_index+=(_match.index+1);
strAux=str.substr(_index);
}
return (_index-1);
}
que si me devuelve el index donde se encuentra el ultimo http
pero estoy convencido de que deberia haber otra solucion que usara unicamente la expresion regular en un solo match
¿tengo algo mal en la sintaxis de la expresion regular? ? X(?!=Y) no significa lo que creo? no se puede hacer en javascript?
Gracias. Hasta luego.