Avatar billede supermand69 Nybegynder
24. januar 2006 - 21:22 Der er 25 kommentarer og
1 løsning

reg exp

jeg skal have lavet noget der kan genkende id's på nogle div elementer

som det ser ud nu finder den elementer der har id's der hedder noget med 'thread_div['+id+'_', men skal have lavet den lidt mere kompleks evt. med lidt reg exp.

mine id's ser på nuværende tidspunkt sådan her ud (id=42):
thread_div[42_233]
thread_div[42_344]
thread_div[42_32]

men den kunne finde dem dem når de ser sådan her ud (id=42):
thread_div[5_42_233]
thread_div[6_42_344]
thread_div[87_42_32]

var div_arr = document.getElementsByTagName('div');

for(i=0; div_arr.length>i; i++)
{
    if(div_arr[i].id.indexOf('thread_div['+id+'_') == 0)
}
Avatar billede tjp Mester
25. januar 2006 - 00:40 #1
Nedenstående skulle gøre det ønskede:

var div_arr = document.getElementsByTagName('div');
for(i=0; div_arr.length>i; i++)
{
    var re = new RegExp("thread_div[[][0-9]+_"+id+"_[0-9]+[]]","ig");
    if(re.test(div_arr[i])) { "DEN MATCHER MØNSTERET" }
}
Avatar billede tjp Mester
25. januar 2006 - 00:42 #2
Du må selv erstatte "DEN MATCHER MØNSTERET" med noget fornuftigt. ;-)
Avatar billede roenving Novice
25. januar 2006 - 07:23 #3
-- og hvis det skal tillades, at den foranstående kan udelades:

new RegExp("^thread_div\\[(\\d+_)?"+id+"_\\d+\\]$");

-- og jeg fjernede også moderatorerne, da de jo ikke giver mening i fast defineret kode (store/små bogstaver), og vil sløre, at det faktisk er hele id'et, der skal bruges !-)
Avatar billede tjp Mester
25. januar 2006 - 13:01 #4
Jeg giver dig ret i at 'global' skal væk, men jeg vil mene at 'ignore case' bør være der.
Avatar billede supermand69 Nybegynder
25. januar 2006 - 20:08 #5
hvor kommer "test" fra??

re.test(div_arr[i))
Avatar billede supermand69 Nybegynder
25. januar 2006 - 20:16 #6
Jeg formulerede mig vist ikke helt korrekt :)

Den skulle ikke kunne finde thread_div[42_233] og thread_div[5_42_233], altså hvor de er opstillede på begge måder... men den skulle kun søge efter den sidste gruppe hvor der er 3 tal med i

Kan den så ikke nøjes med at se således ud?

var re = new RegExp("^thread_div\\[\\d+_"+id+"_");

og lige en ting mere... de to backslashes foran [, hvad gør de? Escaper de bare [ eller hvad gør de?
Avatar billede tjp Mester
25. januar 2006 - 23:49 #7
'test' er en metode i RegExp-objektet som returnerer 'true', hvis objektets regulære udtryk matcher noget i strengen.
Det forreste '\' escaper det næste '\' som escaper '['. ;-)
Hvis du bruger:
var re = new RegExp("^thread_div\\[\\d+_"+id+"_");
i stedet for:
var re = new RegExp("^thread_div\\[\\d+_"+id+"_\\d+\\]$");
godtager du også fx 'thread_div[5_42_]' og 'thread_div[5_42_233_32]]' da den første ikke kræver at udtrykket dækker hele strengen.
Avatar billede supermand69 Nybegynder
26. januar 2006 - 18:39 #8
tjp > resten af stringen er ligegyldigt, så starten er det eneste jeg skal bruge :)

jeg har lige en tilføjelse mere, for jeg skal bruge den INT som forekommer før id'et i en funktion.. hvordan gør jeg det?

http://temp.electrobeat.dk/v2/_tst.php
Avatar billede tjp Mester
26. januar 2006 - 23:10 #9
Hvis du fodre nedenstående med fx "thread_div[5_42_233]" returnerer den 5.

function GetInt(str){
  var re = new RegExp("thread_div[[]([0-9]+)_"+id+"_[0-9]+[]]","i");
  var arr = str.match(re);
  return RegExp.$1
}
Avatar billede supermand69 Nybegynder
26. januar 2006 - 23:30 #10
hvorfor laver du så var arr?

arr bliver ikke kaldet nogle steder?
Avatar billede supermand69 Nybegynder
26. januar 2006 - 23:41 #11
Avatar billede tjp Mester
27. januar 2006 - 00:59 #12
Prøv denne her som bruger 'arr' og 'exec' i stedet for:

var tst = "";
for(i=0; div_arr.length>i; i++)
{
  var reg_exp = new RegExp("^thread_div\\[(\\d+)_"+id+"_");
       
  if(reg_exp.test(div_arr[i]))
  {
    var arr = reg_exp.exec(div_arr[i]);
    tst += arr[1]+', ';
  }
}
alert(tst);
Avatar billede supermand69 Nybegynder
27. januar 2006 - 15:51 #13
Avatar billede tjp Mester
27. januar 2006 - 17:54 #14
prøv lige at tjekke om den kommer ind i if-sætningen overhovedet og udskriv også arr's indhold.
Avatar billede supermand69 Nybegynder
27. januar 2006 - 19:41 #15
jo, men kunne du ikke bare lige copy/paste koden over i et nyt dokument og teste? :) er ikke så sej til JS
Avatar billede tjp Mester
28. januar 2006 - 01:50 #16
Så skylder du vist mig en sodavand! ;-)
Det var dit opslag i 'div_arr' den var gal med: 'div_arr[i]' skal rettes til 'div_arr[i]['id']', da førstnævnte giver 'div'-objektet som associativt array.

function expand_thread_all(id)
{
    var div_arr = document.getElementsByTagName('div');
    var tst = '';
    for(i=0; div_arr.length>i; i++)
    {
        var reg_exp = new RegExp("^thread_div\\[(\\d+)_"+id+"_");
       
        if(reg_exp.test(div_arr[i]['id']))
        {
            var arr = reg_exp.exec(div_arr[i]['id']);
            tst += arr[1]+', ';
        }
    }
   
    alert(tst);
}
Avatar billede supermand69 Nybegynder
28. januar 2006 - 15:08 #17
cola, fanta, sprite? :)

jeg har lige en tilføjelse mere.. hvordan kan man slette identiske variabler?

har lavet lidt om på min kode igen.. hehe
http://temp.electrobeat.dk/v2/_tst.php
Avatar billede tjp Mester
29. januar 2006 - 02:39 #18
Hvis variablerne ligger sorteret i array'et:
Kig på to efterfølgende elementer ad gangen (hvis de findes) og kopiér kun den første over i nyt array, hvis de er forskellige, ryk en plads frem i array'et og gentag. Bagefter kopieres det sidste element over - fanger også specialtilfældet hvor der kun er ét element.

Ligger de ikke sorteret:
Sortér dem først! ;-)
Avatar billede supermand69 Nybegynder
29. januar 2006 - 11:09 #19
og hvordan gør man så alt det her? som jeg har sagt det før - fatter ikke JS, men kunne som sagt have lavet det i PHP hvis det var.. det er bare ikke tilfældet at jeg skal lave det deri nu :)

synes rent faktisk at JS kodes i en lidt underlig og måske besværlig måde.. men det er vel en vanesag.. hehe
Avatar billede supermand69 Nybegynder
29. januar 2006 - 11:11 #20
findes der ikke en funktion som direkte går ind og sletter identiske værdier i et array?
Avatar billede tjp Mester
30. januar 2006 - 16:38 #21
Ikke hvad jeg ved af, men det er da også meget sjovt at lave funktionen selv, eller hva? PHP ligger da for resten ikke så langt fra JS at det gør noget.
Avatar billede supermand69 Nybegynder
30. januar 2006 - 16:52 #22
jamen jeg kender jo slet ikke de "indbyggede" funktioner..

man har jo php.net at støtte sig lidt til
Avatar billede supermand69 Nybegynder
30. januar 2006 - 16:56 #23
jeg ved ikke engang hvordan man sorterer et array
Avatar billede tjp Mester
30. januar 2006 - 17:06 #24
Avatar billede supermand69 Nybegynder
30. januar 2006 - 20:35 #25
tak for hjælpen :)
Avatar billede tjp Mester
30. januar 2006 - 23:58 #26
Velbekomme... :)
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
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

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