Avatar billede zeusdk Nybegynder
19. januar 2003 - 21:42 Der er 19 kommentarer og
2 løsninger

En vanskelig lille en

Hej

Jeg har et script, som smider en slash bagpå et link, hvis slashen mangler. Scriptet sletter også filnavnet. Sciptet gør således:

hjemmeside.dk/underbib/index.htm -> 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?

(Alle de filnavne, som skal bruges i mit system, indeholder et punktum - så ved du det :-)
____________________________________

Mit script:

document.linkSubmit.link.value = txt.replace( /^(.+\/\/[^\/]+)(\/[^\/]*)?$/, '$1/' );

Jeg har også modtaget et script fra Jesper Natur:

document.linkSubmit.link.value = txt.replace( /^(.+\/\/.+?)(\/[^\/]*)?$/, '$1/' );

Problemet var bare, at den sagde "uventet kvantor" (ved det først + fra venstre) i IE5, mens det fungrede fint i IE6.

Hvis du vil hjælpe mig, så kan du enten udbygge mit script eller rette fejlen i Jesper Naturs script.
Avatar billede _darkstar_ Nybegynder
19. januar 2003 - 21:48 #1
Se mit tidligere svar på det spørgsmål som du lige har lukket.
Avatar billede _darkstar_ Nybegynder
19. januar 2003 - 21:49 #2
Mao. mit svar står i bunden af http://exp.dk/spm/307045
Avatar billede _darkstar_ Nybegynder
19. januar 2003 - 21:50 #3
For god ordens skyld bringer jeg det her:

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 zeusdk Nybegynder
19. januar 2003 - 21:55 #4
Det kan godt være at det er mig der er noget galt med, men scriptet gør intet ved urlen.

var txt = document.linkSubmit.link.value;

        document.linkSubmit.link.value = txt.replace(/^(.+)\/[^\/]*$/,'$1')
        document.linkSubmit.link.value = txt.replace(/\/[^\/\.]+$/,'/$1/')
Avatar billede _darkstar_ Nybegynder
19. januar 2003 - 22:05 #5
Sorry. Der var en fejl. Nu burde de altså virke:

replace(/^(.+)\/[^\/]+\.[^\/]+$/,'$1')
replace(/(^|\/)([^\/\.]+)$/,'/$2/')
Avatar billede zeusdk Nybegynder
20. januar 2003 - 15:48 #6
Ok, nu sætter den rigtigt nok en slash bagpå linket, hvis slashen ikke er der i forvejen. Godt.

Men hvorfor sletter den ikke længere filnavnet? Således:

www.eksperten.dk/index.htm -> www.eksperten.dk/
Avatar billede Slettet bruger
20. januar 2003 - 16:04 #7
Dit script fra Jesper Natur, kan da heller ikke klare at der kommer flere underkataloger på?

Hvis det er i orden med to udtryk, er her to kortere forslag, men de er ikke testet:

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

Dette regulære udtryk finder den sidste / i linket. Herefter matcher den mindst et tegn som ikke hverken er / eller . Så /bib/ bliver ikke ændret, men /bib/bib1 får sat / efter sig.

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

Matcher alt sidst i linket som indeholder mindst et punktum, men ingen /

Erstatter med den tomme streng.
Avatar billede zeusdk Nybegynder
20. januar 2003 - 16:12 #8
Fantastisk jjust - alt virker i IE6 :-)

Så mangler jeg bare lige at teste om det virker i IE5. Jeg vender tilbage.
Avatar billede zeusdk Nybegynder
20. januar 2003 - 16:25 #9
>>jjust
Hov, gør den følgende (og det gør den i begge browsere):
www.test.dk -> [intet] - (skulle blive til www.test.dk/
www.test.dk/test -> www.test.dk/test (skulle blive til www.test.dk/test/
Avatar billede Slettet bruger
20. januar 2003 - 16:32 #10
Det var da utroligt :(

Kan du ikke maile mig et minimalt testscript, som jeg selv kan teste i min browser. Så skal jeg nok rette det til.

www.test.dk bliver ikke matchet af det første udtryk, men af det sidste, og bliver derfor slettet.

Hvorfor den sidste af dem ikke virker aner jeg ikke, men finder nok ud af det.

just@daimi.au.dk
Avatar billede zeusdk Nybegynder
20. januar 2003 - 16:37 #11
Du kan bare få scriptet her:

<script>
var txt = "http://www.test.dk";
url = txt.replace(/(\/[^\/\.]+)$/, '$1/')
url = txt.replace(/[^\/]+\.[^\/]*$/, '')
alert (url);
<script>
Avatar billede zeusdk Nybegynder
20. januar 2003 - 16:38 #12
<script> = </script>
Avatar billede jespernaur Nybegynder
20. januar 2003 - 17:10 #13
Der er vist opstået en fejl med jeres opfattelse af mit navn. Det rigtige er:

Jesper Naur
Avatar billede zeusdk Nybegynder
20. januar 2003 - 17:12 #14
>>Jesper Naur
Jeg undskylder manne gange - jeg kunne åbenbart ikke helt huske det ;-)
Avatar billede Slettet bruger
20. januar 2003 - 18:01 #15
Nedenstående script virker i IE60:

<script>
var txt = "http://www.test.dk";
txt = txt.replace(/(\/\/[^\/]+)((\/[^\/\.]+)*)$/, '$1$2/')
url = txt.replace(/[^\/]*$/, '')
alert (url);

var txt = "http://www.test.dk/test";
txt = txt.replace(/(\/\/[^\/]+)((\/[^\/\.]+)*)$/, '$1$2/')
url = txt.replace(/[^\/]*$/, '')
alert (url);


var txt = "http://www.test.dk/test/test1";
txt = txt.replace(/(\/\/[^\/]+)((\/[^\/\.]+)*)$/, '$1$2/')
url = txt.replace(/[^\/]*$/, '')
alert (url);

var txt = "http://www.test.dk/index.html";
txt = txt.replace(/(\/\/[^\/]+)((\/[^\/\.]+)*)$/, '$1$2/')
url = txt.replace(/[^\/]*$/, '')
alert (url);


var txt = "http://www.test.dk/test/index.html";
txt = txt.replace(/(\/\/[^\/]+)((\/[^\/\.]+)*)$/, '$1$2/')
url = txt.replace(/[^\/]*$/, '')
alert (url);

</script>
Avatar billede zeusdk Nybegynder
20. januar 2003 - 18:13 #16
Det virker - undtagen:

<script>
var txt = "http://www.test.dk";
txt = txt.replace(/(\/\/[^\/]+)((\/[^\/\.]+)*)$/, '$1$2/')
url = txt.replace(/[^\/]*$/, '')
alert (url);

Den sletter altså (i min browser, ie6) urlen, så der bare står "http://"
Avatar billede zeusdk Nybegynder
20. januar 2003 - 18:14 #17
Den skulle netop sætte en slash i enden af url, hvis ikke at brugeren selv havde indtastet det.
Avatar billede Slettet bruger
20. januar 2003 - 18:27 #18
Okay, det er mystisk. Jeg kører samme browser som dig, og der giver den altså det rigtige.

Jeg kopierer den lige fra min test fil en gang til hvis et eller andet skulle være gået galt.
<script>
var txt = "http://www.test.dk";
txt = txt.replace(/(\/\/[^\/]+)((\/[^\/\.]+)*)$/, '$1$2/')
url = txt.replace(/[^\/]*$/, '')
alert (url);
</script>
Avatar billede zeusdk Nybegynder
20. januar 2003 - 19:45 #19
Det virker nu - mange tak for hjælpen.

Det er lidt sjovt, hvorfor variant 1 virker, mens variant 2 ikke gør (bemærk at de har samme reg.exp-kode):

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

2)
document.linkSubmit.link.value = txt.replace(/(\/\/[^\/]+)((\/[^\/\.]+)*)$/, '$1$2/')
document.linkSubmit.link.value = txt.replace(/[^\/]*$/, '')

Det er også lige meget, fordi jeg har nu ændret koden så det virker. Jeg undrer mig dog over, hvorfor en variabel kan være forskellen, som gør at det virker. ;)
Avatar billede Slettet bruger
20. januar 2003 - 20:08 #20
Det er nu klart nok hvorfor 2 ikke virker!

I 1) arbejdes først på txt, og derefter den opdaterede txt.

I 2) arbejdes på txt i begge tilfælde, og derfor virker udtrykket (/[^\/]*$/ ikke da det antager at der er en / til sidst i txt.
Avatar billede zeusdk Nybegynder
20. januar 2003 - 20:09 #21
Okay manner :-) Jeg takker for alt hjælpen :-)
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