Avatar billede montago Praktikant
22. april 2005 - 10:14 Der er 12 kommentarer og
1 løsning

Problemer i Javascript mht regexp

hvorfor virker dette eksempel ikke...

målet er at bruge regexp.exec til at danne et array som skal printes usd... men det array jeg får, indeholder kun et 0-element

alle steder jeg har læst om regexp, skal exec bruges til at danne et array... men det virker BARE IKKE ! :(

SPLIT kan ikke bruges til at finde Matches !!!

se evt js-src på www.mdk-photo.com/javascript/regex-lense.asp
--------------------------------------
var regx = '(\d+)'
var str = '12-23-45-68-789-9-14-5-4-586-1-5-6-45-6-14'

var reg = new RegExp(regx)
var arr = reg.exec(str,"gim")
var show = ''

for(i=0;i<arr.length;i++)
    show = show + arr[i]
document.write(show)
----------------------------------------
Avatar billede erikjacobsen Ekspert
22. april 2005 - 12:09 #1
den laver kun et array for de parenteser du har i det regulære udtryk. Og du har een.
Hvad med:

var str = '12-23-45-68-789-9-14-5-4-586-1-5-6-45-6-14'
var arr = str.split(/[^0-9]+/)
var show = ''

for(i=0;i<arr.length;i++)
    show = show + arr[i]
document.write(show)
Avatar billede montago Praktikant
22. april 2005 - 12:52 #2
jeg har rodet lidt med det du foreslog...

og det virker så længe split sætningen er statisk programmeret

men hvad nu hvis jeg bruger en variable...

var reg_exp = "/[^0-9]+/"
var str = '12-23-45-68-789-9-14-5-4-586-1-5-6-45-6-14'
var arr = str.split(reg_exp)
var show = ''

for(i=0;i<arr.length;i++)
    show = show + arr[i]
document.write(show)

dette kan jeg ikke helt få til at virke ? :(
Avatar billede erikjacobsen Ekspert
22. april 2005 - 12:56 #3
Det er fordi du ikke skal bruge en streng, men et regulærtudtryks-objekt

var reg_exp = /[^0-9]+/;
Avatar billede montago Praktikant
22. april 2005 - 13:00 #4
så i det tilfælde at jeg i stedet vil bruge en streng, hvad gør jeg så ?

var reg_exp = document.getElementById('regx').value
var spntxt = document.getElementById('spn').value;
var show = ''

var res_arr = spntxt.split(reg_exp)
for(i=0 ; i<res_arr.length ; i++)
    show = show + res_arr[i] + "<br>\n"
Avatar billede erikjacobsen Ekspert
22. april 2005 - 21:41 #5
Så laver du et regulærtudtryks-objekt:

var reg="[^0-9]+";
var arr = str.split(new RegExp(reg))
Avatar billede montago Praktikant
22. april 2005 - 23:06 #6
okay... det giver mening...

og det virker --- juhuuu :)))

een lille ting som iretere... er karotten = ^
uden den får jeg et array af bindestreger...
hvad hvis min split er mere kompleks ???

hvordan planter jeg ^ så jeg kan lave mere komplekse RegExp's ??
Avatar billede erikjacobsen Ekspert
22. april 2005 - 23:10 #7
i en [....] betyder en ^ forrest [^....] at man ikke vil have de efterfølgende tegn.

Hvis den skal være mere kompleks må du enten
- spørge
- lære regulære udtryk
Sidste punkt går nok lidt over hvad jeg overkomme at gøre for dig her og nu ... ;)
Avatar billede montago Praktikant
24. april 2005 - 20:43 #8
okay... netop derfor ville jeg uden om Split... da den matcher og splitter på udsagnet, istedet for Match og Exec som efter refferencen på www.regular-expressions.info og de andre sider man finder på MSDN og via Google -- skulle lave det array som jeg så gerne vil have...

hvis jeg fx vil have alle resultater ud som matcher (\d+-\d+mm) kan jeg jo ikke bruge split, som kræver ^ for at udelukke netop det match jeg vil lede efter...

hvorfor findes der ikke en metode til at danne et array af matches ?? som går uden om Split ??
Avatar billede roenving Novice
24. april 2005 - 20:55 #9
?-)

<script language="javascript" type="text/javascript">
var str = '12-23mm-45-68mm-789-9mm-14-5mm-4-586mm-1-5mm-6-45mm-6-14mm';
var reg = new RegExp("\\d+\\-\\d+mm","g");
var arr = str.match(reg);
var res = "";
for(i=0;arr.length>i;i++)
  res += arr[i] + "\n";
alert(res);
</script>
Avatar billede erikjacobsen Ekspert
24. april 2005 - 21:55 #10
Du behøver ikke lave en split med ^ forrest. Det var bare det der lignede dit eksempel mest. Du kan lave en split på skilletegn, her "-". Eller bruge match, som rønving siger.
Avatar billede montago Praktikant
25. april 2005 - 14:02 #11
roenving ramte plet !!!!!!!!!

send et svar, så du kan få nogle point :)
Avatar billede roenving Novice
25. april 2005 - 14:17 #12
Velbekomme '-)
Avatar billede roenving Novice
25. april 2005 - 14:34 #13
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
Kategori
Kurser inden for grundlæggende programmering

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