Avatar billede nute Nybegynder
10. maj 2004 - 10:29 Der er 11 kommentarer og
1 løsning

Finde flere værdier v.h.a RegExp

RegExp er ikke min stærke side, og jeg har en udfordring der skaber nogle grå hår.

Jeg har en række links på en side, som jeg løber igennem. Når jeg har fundet et specifikt link (på baggrund af et af parametrene i linket), så vil jeg manipulere dette link. det er 3 parametre jeg vil kigge på. At finde én af disse parametre, er ingen problem, men at skulle skrive et regexp der matcher alle mine parametre, kan jeg ikke finde ud af :-( Jeg har følgende kode:

<script language="JavaScript" type="text/javascript">
<!--
var strLink = "mitLink.htm?PARAM1=value1&PARAM2=value2&PARAM3=value3";
var objRegExp = new RegExp().compile( "^.*(PARAM2=value2).*$" )
objRegExp.exec( strLink );
alert( RegExp.$1 );
//-->
</script>

Dette giver mig 'PARAM2=value2' i min alert. Det jeg ønsker, er også at kunne matche PARAM1 og PARAM3. Jeg ved ikke hvor disse parametre optræder i mit link ... jeg ved blot at de er der.

/nute
Avatar billede mm12010 Nybegynder
10. maj 2004 - 11:47 #1
nogen særlig årsag til at du vil bruge RegExp?-)
Avatar billede nute Nybegynder
10. maj 2004 - 12:27 #2
fordi jeg sagtens kan lave det på en anden måde ;-)

regexp er kort, smukt, elegant og precist - og så sparer jeg mange linier kode

/nute
Avatar billede roenving Novice
10. maj 2004 - 18:31 #3
Kender du da værdierne, som parametrene har ?-)
Avatar billede nute Nybegynder
10. maj 2004 - 18:35 #4
jeg kender værdien af PARAM2, men ikke af de andre
Avatar billede roenving Novice
10. maj 2004 - 18:46 #5
Jeg er enig med dig at regexp har sine fordele, og man kan jo også lave nogle meget elegante funktioner, men hvis rækkefølgen kan skifte, ville jeg da også overveje den simple parsing, som også bruges mod location.search !-)

var reg = /.*PARAM1=([^&]*).*/gi;
param1 = strLink.replace(reg, "$1");

-- kan du jo gentage 3 gange !-)
Avatar billede nute Nybegynder
10. maj 2004 - 18:49 #6
dette er noget ála hvad jeg har stykket sammen, men havde håbet på at det kunne løses i ét hug med regexp. skaber det problemer når man nu ikke ved hvilken rækkefølge mine params kommer i ?
Avatar billede roenving Novice
10. maj 2004 - 19:23 #7
Jeg kan ikke få forskellige variabler ud, og da rækkefølgen er den som kommer fra linket, hvis man bruger | (or-tegn) kan den heller ikk umiddelbart splittes til noget fornuftigt ...

var strLink = "mitLink.htm?PARAM1=value1&PARAM2=value2&PARAM3=value3";
var reg = /(PARAM2=[^&]*)|(PARAM1=[^&]*)|(PARAM3=[^&]*)/gi;
param1 = strLink.replace(reg, "$1 $2 $3");
alert(param1);

Da jeg regner med, at din rækkefølge har en betydning i din programmering, ville jeg lave en split-version i flere omgange !-)
Avatar billede nute Nybegynder
10. maj 2004 - 19:34 #8
roenving >> rækkefølgen af mine parametre, bliver lavet dybt nede i COM+ og jeg har ingen kontrol over den. rækkefølgen er ligegyldig, men jeg ved at jeg skal have fat i nogle af værdiene. det ser nok ud til at jeg bliver nødt til at beholde min "ikke fuldt så elegante" version, som minder meget om dit første forslag.

smid du bare et svar, så du får noget for forsøget :o]
Avatar billede roenving Novice
10. maj 2004 - 19:50 #9
Kom til at tænke på en algoritme, som kunne lave parsingen bare en lille smule smart:

var parms = ['PARAM1','PARAM2','PARAM3'],vals=new Array();
var strLink = "mitLink.htm?PARAM2=value2&PARAM1=value1&PARAM3=value3";
var srch = strLink.split('?')[1].split('&');
for(i=0;srch.length>i;i++){
  srch[i] = srch[i].split('=');
  for(j=0;parms.length>j;j++){
    if(parms[j]==srch[i][0])vals[j]=srch[i][1];
  }
}

-- håber du kan bruge det '-)
Avatar billede nute Nybegynder
10. maj 2004 - 21:07 #10
nja .. njo ... grunden til at jeg ville bruge regexp, var fordi jeg ville erstatte mit ene parameter, og fjerne de to andre, så jeg havde håbet på at bruge et smart regexp for at lave det hele i et hug, og spare antal linier kode ;o]

thanx anyway
Avatar billede roenving Novice
10. maj 2004 - 22:13 #11
Hvis du ikke kender rækkefølgen, kan jeg ikke se en vej ...

Medmindre sådan vil gøre det:

var strLink = "mitLink.htm?PARAM1=value1&PARAM2=value2&PARAM3=value3";
var reg = /(PARAM2=[^&]*&?)|(PARAM1=[^&]*&?)|(PARAM3=[^&]*&?)/gi;
param1 = strLink.replace(reg, "PARAM2=value77&").replace(/&PARAM2=value77|&/g,"");
alert(param1);
Avatar billede roenving Novice
10. maj 2004 - 22:14 #12
-- og tak for point ;~}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester