Avatar billede themepark Nybegynder
14. marts 2005 - 19:39 Der er 21 kommentarer og
1 løsning

Undgå grouping i regulært udtryk?

Jeg har lavet dette udtryk

[A-Z][a-z]+( [A-Z][a-z]+)+

som skal kunne matche en streng bestående af et stort bogstav, og et eller flere små bogstaver, efterfulgt af en eller flere forekomster af strengen med mellemrum, et stort bogstav og et eller flere små bogstaver.

Udtrykket virker sådan set fint nok, problemet er bare, at hvis jeg tester mit udtryk på en hjemmeside, jeg har fundet, og angiver en streng med 2 mellemrum i, som f.eks.

Ab Cd Ef

så matcher den både på hele strengen, men også på  Ef, og jeg ønsker kun, at den skal matche hele strengen. Jeg aner ikke, hvordan jeg kan gøre det her uden grouping. Nogle, der kan hjælpe?

Venlig hilsen
Michael K. P.
Avatar billede barklund Nybegynder
14. marts 2005 - 19:47 #1
Er det ikke bare at åbne med ^ og lukke med $?

Altså matche på:

/^[A-Z][a-z]+( [A-Z][a-z]+)$/g

Så kan du vel kun amtche hele indholdet - og ikke blot noget af det.

Hvis jeg forstår rigtigt :)

--
Morten Barklund
Avatar billede themepark Nybegynder
14. marts 2005 - 19:55 #2
Nej, det giver samme resultat :( Jeg får stadigvæk også group delen testet. Jeg går ud fra at den ikke skal være med, men så ved jeg ikke, hvordan jeg ellers kan lave en + på det udtryk.
Avatar billede barklund Nybegynder
14. marts 2005 - 20:00 #3
Men hvad er problemet i, at du får sidste del med?

Derudover er JS regulære udtryk ikke så kraftfulde som Perl-versionen - den kan noget mere (blandt andet gruppere uden at lave det til et pattern på den måde).

Prøv at komme med lidt kontekst.
Avatar billede themepark Nybegynder
14. marts 2005 - 20:02 #4
kontekst? Jeg har da givet kontekst. Problemet er, at jeg kun ønsker at matche på hele strengen, og ikke også dele af den.
Avatar billede barklund Nybegynder
14. marts 2005 - 20:16 #5
Fortæl venligst helt præcist hvilke strenge (præcist strengens indhold) der validerer, men som ikke må validere.

Hvis jeg skriver:

alert(("Ad Be Ef").match(/^[A-Z][a-z]+( [A-Z][a-z]+)$/g));

virker det, men skriver jeg:

alert(("fwerfwe Ad Be Fe").match(/^[A-Z][a-z]+( [A-Z][a-z]+)$/g));
alert(("Fe").match(/^[A-Z][a-z]+( [A-Z][a-z]+)$/g));

Så matcher ingen af dem - altså ser det ud til at virke ganske som det skal. Hvad oplever du af problemer? I hvilket script giver det problemer?
Avatar billede themepark Nybegynder
14. marts 2005 - 20:20 #6
Nu er sagen, som sagt, at jeg ikke tester det i mit script, jeg bruger en hjemmeside til det lige nu. Og på den hjemmeside får jeg at vide, at både hele min streng, men også " Ef" delen matcher, mit problem er altså at jeg vil skrive det om, således, at det KUN er hele min streng, der matcher, som det er nu, matcher den jo også min group...derfor går jeg ud fra at jeg skal fjerne de (), og så på en anden måde angive at det er et udtryk for sig.
Avatar billede barklund Nybegynder
14. marts 2005 - 20:24 #7
Jeg forstår simpelthen ikke hvad problemet er. Må vi ikke se dit script og scriptets kontekst?

Og ja, jeg har også testet det i en browser (men ikke på en hjemmeside som sådan).

Jeg synes ikke at være synderligt dum, men jeg forstår overhovedet ikke hvordan du kommer frem til dit problem.

--
Morten Barklund
Avatar billede themepark Nybegynder
14. marts 2005 - 20:28 #8
Jeg tror, du har misforstået mig. Når jeg siger på en hjemmeside, mener jeg ikke på den, jeg selv er i gang med at kode, men på en, der ligger på nettet, og som jeg bruger til at teste regulære udtryk med.

http://www.roblocher.com/technotes/regexp.aspx
Avatar billede barklund Nybegynder
14. marts 2005 - 23:21 #9
Så handler det jo bare om, at du helt er med på outputtet fra den side :)

Det står bare, at match 1 (som er markeret med blåt i grafikken) er matchet op og heri er der et undermatch, der er " Ef" - men " Ef" i sig selv matcher ikke hele udtrykket.

Andet står der såmænd ikke - dit regulære udtryk matcher fint hvad det skal matche.

--
Morten Barklund
Avatar billede themepark Nybegynder
15. marts 2005 - 11:07 #10
Ja, det ved jeg godt, at det gør, men jeg ønsker at lave mit udtryk om, således at jeg ikke skal bruge grouping, og dermed ikke får den undermatch, når jeg tester det, jeg ved bare ikke, hvad jeg ellers kan bruge i stedet for ()?
Avatar billede barklund Nybegynder
15. marts 2005 - 13:09 #11
Hvorfor vil du ikke have en undermatch?

En undermatch bruges kun, når man skal erstatte det matchede eller udtrække hvad, man har matchet.

Og i begge disse features kan undermatches ignoreres fuldstændig, som man lyster det.

Jeg kan simpelthen ikke se, hvorfor du ikke vil have en undermatch?
Avatar billede themepark Nybegynder
15. marts 2005 - 13:12 #12
Spørgsmålet er, hvordan laver jeg mit pattern, så jeg ikke behøver bruge grouping? :)
Avatar billede barklund Nybegynder
15. marts 2005 - 13:19 #13
I PCRE vil man kunne skrive:

/^[A-Z][a-z]+(?: [A-Z][a-z]+)$/g

Da (?:udtryk) giver et udtryk, der opfører sig fuldstændig som var der kun (udtryk), men det bliver ikke medtaget som en undermatch. Det har man dog ikke tilgængeligt i JavaScript implementationen og du kan derfor (så vidt jeg ved) ikke lave det på anden vis.

Men jeg kan stadig ikke se, hvorfor det ikke skulle være godt nok - det vil jeg insistere på, til jeg dør! :D

--
Morten Barklund
Avatar billede themepark Nybegynder
17. marts 2005 - 17:07 #14
Hmmm...jeg har lige prøvet udtrykket (dog uden /g) på den side, som åbenbart skulle benytte sig af JavaScript, og der fungerer det som jeg vil have det til, altså kun en match :) Hvorfor XSLT (som det reelt set er, jeg skal have det til at virke i) ikke godtager det udtryk, er mig en gåde, men skidt, problemet er løst :) Så hvis du lige gider at smide et svar :)
Avatar billede barklund Nybegynder
17. marts 2005 - 17:47 #15
Tja, helt i orden :)
Avatar billede themepark Nybegynder
17. marts 2005 - 17:58 #16
En kommentar er ikke mange point værd ;)
Avatar billede barklund Nybegynder
17. marts 2005 - 18:01 #17
Øij, å gør'et hvær gan'!
Avatar billede themepark Nybegynder
17. marts 2005 - 18:04 #18
Ja...åbenbart også denne gang ;)
Avatar billede themepark Nybegynder
17. marts 2005 - 18:18 #19
Med andre ord...stadig intet svar ;)
Avatar billede barklund Nybegynder
17. marts 2005 - 23:08 #20
Aij, nu bliver jeg sur!
Avatar billede themepark Nybegynder
18. marts 2005 - 13:03 #21
DET var bedre...nu har du i allerhøjeste grad fortjent dine point *g*
Avatar billede barklund Nybegynder
18. marts 2005 - 13:07 #22
Hehe, tak for dem :)
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