Pozdrav,
zanima me kako mogu targetirati određeni dio patterna… mozda najbolje da objasnim putem primjera:
var replacer=function(match, p1, p2)
{
var index=arguments[arguments.length-2];
alert(p1); //->'trazim'
alert(p2); //->'izraz'
return '...';
}
string=string.replace(/(trazim)(?:neki)(izraz)/gi, replacer);
…ovdje je znači vrlo očito da sa argumentom p2, dohvaćam traženi dio patterna koji se nalazi u trećoj zagradi. (U trećoj, a ne u drugoj, jer druga nije indeksirana zbog "?:"
) …no taj (? je jedini način na koji mogu barem malo si urediti naknadno dohvaćanje pojedinog matchinga…no to mi nekako nije dovoljno.
Ja bi da si mogu označiti željenu zagradu u patternu, da mogu direktno doći do nje…i da taj način dohvaćanja matchinga te zagrade se neće poremetiti naknadnim dodavanjem još zagrada u izvorni pattern.
Tipa, ako gornji pattern malo izmjenim:
string=string.replace(/(tra(zim|gam))(?:neki)(izraz)/gi, replacer);
…sad bi morao mijenjati i funkciju replacer(), jer p2 više ne odgovara trećoj zagradi.
Želja mi je imati to fiksno, kao što index matchinga mogu uvijek dohvatiti na željenoj poziciji: arguments[arguments.length-2]; ,