Avatar billede zeusdk Nybegynder
19. januar 2003 - 15:52 Der er 16 kommentarer og
1 løsning

Udvide lidt på script

Hej

Jeg har et script, som smider en slash bagpå et link, hvis slashen mangler - og den del fungerer fint. Scriptet sletter også filnavnet f.eks. index.htm, hvis det er blevet indtastet.

Med andre ord så gøre sciptet således:

www.hjemmeside.dk/underbib/index.htm -> www.hjemmeside.dk/underbib/

Men kommer der bare et ekstra underbibliotek på, så sletter den desværre ikke filnavnet. Kan du hjælpe mig med det?
____________________________________

document.linkSubmit.link.value = txt.replace( /^(.+\/\/[^\/]+)(\/[^\/]*)?$/, '$1/' );
Avatar billede luk Nybegynder
19. januar 2003 - 16:07 #1
Hej dav

Hvis du giver den første del af dit reg.exp en "quantifier", så det kommer til at hedde:
( /^(.+\/\/[^\/]+)*(\/[^\/]*)?$/, '$1/' )

Dermed vælges 0 - mange directories.

--Luk
Avatar billede zeusdk Nybegynder
19. januar 2003 - 16:13 #2
Hej luk

Jeg har afprøvet scriptet men det virker ikke - den erstatter eller sletter intet:

document.linkSubmit.link.value = txt.replace( ( /^(.+\/\/[^\/]+)*(\/[^\/]*)?$/, '$1/' ) );
Avatar billede _darkstar_ Nybegynder
19. januar 2003 - 16:38 #3
Så simpelt kan det gøres:

replace(/^(.+)(?=/[^/]*)$/,'$1')
Avatar billede _darkstar_ Nybegynder
19. januar 2003 - 16:39 #4
Eller måske snarere

replace(/^(.+)(?=\/[^\/]*)$/,'$1')

...jeg glemte at escape /.
Avatar billede Slettet bruger
19. januar 2003 - 16:40 #5
Hvordan kan du sidst i linket skelne mellem et filnavn og et bibliotek?
Avatar billede _darkstar_ Nybegynder
19. januar 2003 - 16:41 #6
Hvis det ikke virker, så burde dette her virke:

replace(/^(.+)\/[^\/]*$/,'$1')
Avatar billede Slettet bruger
19. januar 2003 - 16:44 #7
darkstar: starter et link ikke med http://?

Din sidste regexp vil da ikke matche noget?
Avatar billede zeusdk Nybegynder
19. januar 2003 - 16:46 #8
>>darkstar
Det virker (dit sidste script)... næsten... scriptet sletter dog det sidste slash og hvis der ikke findes noget slash så sletter den blot det hele :-)

Den skulle i stedet smide et slash i enden på url'en, hvis altså at slashen ikke var der i forvejen.
Avatar billede zeusdk Nybegynder
19. januar 2003 - 17:21 #9
Er der ikke en, som kende svaret? Vi er meget tæt ved målet, det sidste foreslåede script skal bare lige udbygges en smule.
Avatar billede Slettet bruger
19. januar 2003 - 17:35 #10
zeusdk: Jeg prøver lige igen :)

Hvordan vil du skelne mellem bilioteker og filnavne sidst i et link?

Ikke alle filnavne behøver vel at blive afsluttet med . et eller andet?

Ellers prøv sådan her:

replace(/\/([^\/.]+)$/'$1/'/)
Avatar billede Slettet bruger
19. januar 2003 - 17:37 #11
ups, rettelse:

replace(/\/([^\/.]+)$/, '$1/')
Avatar billede zeusdk Nybegynder
19. januar 2003 - 17:42 #12
>>jjust
>>Hvordan vil du skelne mellem bilioteker og filnavne sidst i et link?
I 99,99% af tilfældende (på min hjemmesiden) er forskellen et punktum. Så bare sats på det.

Dit foreslåede script, gør desværre intet, hverken sletter eller erstatter.
Avatar billede Slettet bruger
19. januar 2003 - 18:12 #13
Der manglede også en escape ved punktummet

replace(/\/([^\/\.]+)$/, '$1/')

men det hjælper vist ikke.

Den fjerner ikke filnavne, den efterlader dem bare uberørte.

Man kunne evt tilføje et spørgsmålstegn replace(/\/([^\/\.]+)?$/, '$1/'), men så vidt jeg kan se, betyder det at du får to '/' til sidst?

Jeg tror ikke du kan gøre det i ét udtryk:

Der er tre muligheder:

/bib/
/bib
/fil.extension

/bib/: Denne kan vi være ligeglad med, hvis vi ikke matcher den, bliver den ikke ændret.

/bib: Her vil vi godt tilføje '/'

/fil.extension: Her vil vi godt fjerne fil.extension

Så /bib: skal vi altså tilføje '$1/' hvor $1=bib

og i /fil.extension: Skal vi tilføje ''

Men hvis '/' skal skrives i replace delen replace(/x/, '/') så er den jo konstant og dermed ikke til at ændre. Så hvordan tilføjes ''?

Det tvivler jeg som sagt på at du kan gøre i et udtryk.
Avatar billede zeusdk Nybegynder
19. januar 2003 - 19:00 #14
Kan man så ikke lave det til 2 udtryk?

Jesper Natur gav mig ellers et script, som kunne gøre det:
document.linkSubmit.link.value = txt.replace( /^(.+\/\/.+?)(\/[^\/]*)?$/, '$1/' );

Problemet var bare, at den sagde "uventet kvantor" (omkring det først +) i IE5, mens det fungrede fint i IE6.
Avatar billede zeusdk Nybegynder
19. januar 2003 - 21:39 #15
Jeg skal bruge et hurtigt svar, så jeg lukker nu.
Avatar billede zeusdk Nybegynder
19. januar 2003 - 21:43 #16
I skal være meget velkomne til at deltage på: http://www.eksperten.dk/spm/307195
Avatar billede _darkstar_ Nybegynder
19. januar 2003 - 21:48 #17
Jeg overså det med at få hældt en slash på kataloger.

Det kræver to regulære udtryk:

replace(/^(.+)\/[^\/]*$/,'$1') (som jeg foreslog før)

efterfulgt af

replace(/\/[^\/\.]+$/,'/$1/')

Begge udtryk fungerer med og uden "http://" i starten af strengen.
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