Avatar billede shemeri Praktikant
06. februar 2006 - 10:09 Der er 9 kommentarer og
1 løsning

Find & Replace

Hej,

Jeg har brug for en reg.exp. der kan gøre følgene:

"623 64A 645 643 646 20 623 646 20 62A 635 628 62D 20 627 644"
En reg.exp. som gå igennem overstående str og undersøg hvert blok. Hvis en blok består af kun 3 num'er/bogstaver, tilføjes der en '0' tal foran, altså erstatter mellemrum med '0' tal. Hvis en blok bestå af kun 2 tal/bogstaver, erstatter foran-mellemrum med nul tal '0' og tilføjes en anden '0' tal sidste af blok'en?

Kan det laves med reg.exp.??
Avatar billede bernhof Nybegynder
06. februar 2006 - 10:28 #1
Skal lige være sikker på, hvad du mener:

" 64A" bliver til "064A" og
" 20" bliver til "0200"

Så der i sidste ende ikke er nogle mellemrum i strengen?
Avatar billede shemeri Praktikant
06. februar 2006 - 10:29 #2
ja exactly :-)
Avatar billede shemeri Praktikant
06. februar 2006 - 10:59 #3
nej, der er ikke nogle mellemrum i sidste ende i strengen
Avatar billede bernhof Nybegynder
06. februar 2006 - 13:31 #4
Tror desværre ikke jeg kan klare den i et enkelt regular expression.

Kan gøre det i tre trin:

1. Benyt regex

  \b((?:\w|\d){3})\b

  og replace med

  0$1


2. Benyt regex

  \b(?'match'(?:\w|\d){2})\b

  og replace med

  0${match}0


3. Fjern mellemrum fra strengen.


Benyt kun denne løsning i mangel af bedre, da jeg er sikker på, at det kan gøres hurtigere, og måske også endda i ét hug.
Avatar billede bernhof Nybegynder
06. februar 2006 - 13:32 #5
Det skal lige siges, at ovenstående er testet med .NET regex engine.
Avatar billede shemeri Praktikant
06. februar 2006 - 13:34 #6
tak, men hvad vil det svar til i JavaScript :-)
Avatar billede bernhof Nybegynder
06. februar 2006 - 14:04 #7
Det er næsten det samme i Javascript. Dog skal regex nr. 2 se således ud:

\b((?:\w|\d){2})\b

Men jeg er ikke helt sikker på, hvad du så får ud af at replace med:

0$10
Avatar billede roenving Novice
07. februar 2006 - 14:42 #8
Jeg kan heller ikke finde nogen måde at gøre det med kun een, men det kan f.eks. se sådan ud:

<script language="javascript" type="text/javascript">
var x = "623 64A 645 643 646 20 623 646 20 62A 635 628 62D 20 627 644";
var reg1 = /( [\da-z]{2}\b)/g;
var reg2 = / ([\da-z]{3})/ig;
var res = (" " + x).replace(reg1,"$10").replace(reg2,"0$1");
alert(res);
</script>

-- men bør 20 ikke ændres til 0020 ?-)
Avatar billede bernhof Nybegynder
14. februar 2006 - 09:51 #9
har du fået det til at virke, shemeri?
Avatar billede shemeri Praktikant
20. februar 2006 - 15:37 #10
Det virket ikke med reg. men jeg har lavet en function til at løse problemet men takke :-)
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