Avatar billede kapoou Nybegynder
19. december 2008 - 10:18 Der er 5 kommentarer og
1 løsning

Reg ex string

Jeg har brug for et regulært udtryk der kan finde <img> tags i en tekststreng og smide en a href rundt om med reference til billedestien der står i img src'en.

Eksempel

<img src="/images/testimage.jpg">

Skal blive til

<a href="/images/testimage.jpg"><img src="/images/testimage.jpg"></a>

Det som er problemet er at jeg ikke ønsker at billeder der allerede er et link på også skal medtages. Dvs. nedestående i tekststrengen skal IKKE medtages i det regulære udtryk.

<a href="http://www.hjemmesiden.dk"><img src="/images/testimage.jpg"></a>

Er der nogle der har løsningen på ovenstående?
Avatar billede mortvader Nybegynder
19. december 2008 - 18:11 #1
Jeg ville trække alle <a href..> .. </a> ud først, og f.eks. gemme dem i en array.
Jeg ville erstatte dem med placeholders.
Derefter ville jeg sætte nye hrefs omkring de tilbageværende <img> tags.
Til sidst ville jeg sætte linksene fra arrayet tilbage, hvor placeholderne angav deres oprindelige placeringer.
Avatar billede arne_v Ekspert
19. december 2008 - 18:31 #2
Forslag:

Function cvt(s)
    Set re = New RegExp
    rem (?<!<a\s+href\s*=\s*""[^""]*""\s*>)
    re.Pattern = "(<img\s+src\s*=\s*"")([^""]*)(""\s*>)(?!</a>)"
    re.Global = True
    cvt = re.Replace(s, "<a href=""$2"">$1$2$3</a>")
End Function
Avatar billede kapoou Nybegynder
08. januar 2009 - 09:40 #3
-->arne v

Det fungerede desværre ikke. De billeder som ikke allerede havde en a href på sig reagerede ikke på udtrykket.
Avatar billede arne_v Ekspert
09. januar 2009 - 00:45 #4
Øh.

Koden er testet med dine to eksempler og virker med dem.

<%
Function cvt(s)
    Set re = New RegExp
    re.Pattern = "(<img\s+src\s*=\s*"")([^""]*)(""\s*>)(?!</a>)"
    re.Global = True
    cvt = re.Replace(s, "<a href=""$2"">$1$2$3</a>")
End Function

Response.Write cvt("<img src=""/images/testimage.jpg"">") & "<br>" & vbCrLf
Response.Write cvt("<a href=""/images/testimage.jpg""><img src=""/images/testimage.jpg""></a>") & "<br>" & vbCrLf
Response.Write cvt("bla <img src=""/images/testimage.jpg""> bla") & "<br>" & vbCrLf
Response.Write cvt("bla <a href=""/images/testimage.jpg""><img src=""/images/testimage.jpg""></a> bla") & "<br>" & vbCrLf
%>

outputter:

<a href="/images/testimage.jpg"><img src="/images/testimage.jpg"></a><br>
<a href="/images/testimage.jpg"><img src="/images/testimage.jpg"></a><br>
bla <a href="/images/testimage.jpg"><img src="/images/testimage.jpg"></a> bla<br>
bla <a href="/images/testimage.jpg"><img src="/images/testimage.jpg"></a> bla<br>
Avatar billede arne_v Ekspert
19. januar 2009 - 02:09 #5
OK ?
Avatar billede kapoou Nybegynder
20. februar 2009 - 14:47 #6
Det kom aldrig til at fungere ordentligt, men du får dine points for besværet!

Tak for 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