Avatar billede exp-ralle Nybegynder
03. september 2002 - 17:47 Der er 11 kommentarer og
1 løsning

Replace - RegExp

Hejsa...

Jeg kunne godt tænke mig at vide hvordan med RegExp erstatter fx. en tekst der ligner et gyldigt link til en <a href="detlinkder">detlinkder</a>.
Jeg har set noget med $2 $3 (sådan mener jeg det så ud..) men hvordan fungerer det og hvordan gør man ?


Ralle
Avatar billede eagleeye Praktikant
03. september 2002 - 18:00 #1
Jeg har denne function som laver link og email om til links.:

Man skal sætte et patern op som man kan søge igennem strengen. Hvis den findet en tekst som passer på de paterens så kan man så indsætte tekst og de del paterns som er anget med () som så kaldes $1 $2 $3 osv.
Du kan se mere her omkring reobjects: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/vsobjregexp.asp


Function LinkString(strInput)
Set objRegExpHTTP1 = New RegExp
Set objRegExpHTTP2 = New RegExp
Set objRegExpEMail = New RegExp

objRegExpHTTP1.Pattern = "(http|ftp)(:\/\/[\w\._-]+\.[\w\._-]+\S*)"
objRegExpHTTP2.Pattern = "(^|[^\/])(www[^\.\s]?\.[\w\._-]+\.[A-Za-z]{2,3}[\w\S]*)"
objRegExpEMail.Pattern = "([\w\._-]+@[\w\._-]+\.[A-Za-z]{2,3}\S*)"

objRegExpHTTP1.Global = True
objRegExpHTTP2.Global = True
objRegExpEMail.Global = True

objRegExpHTTP1.IgnoreCase = True
objRegExpHTTP2.IgnoreCase = True
objRegExpEMail.IgnoreCase = True

strOutput = objRegExpEMail.Replace(strInput, " <a href='mailto:$1'>$1</a> ")
strOutput = objRegExpHTTP1.Replace(strOutput, " <a href='$1$2' target='_blank'>$1$2</a> ")
strOutput = objRegExpHTTP2.Replace(strOutput, " $1<a href='http://$2' target='_blank'>$2</a> ")

'Dette er til fordi tegn som står uden mellemrum til linket kommer med som en del af linket..
objRegExpHTTP2.Pattern = "(<br>|[,.)\]\}])('>)"
strOutput = objRegExpHTTP2.Replace(strOutput, "$2")
objRegExpHTTP2.Pattern = "(<br>|[,.)\]\}])(' target=)"
strOutput = objRegExpHTTP2.Replace(strOutput, "$2")
objRegExpHTTP2.Pattern = "(<br>|[,.)\]\}])(</a>)"
strOutput = objRegExpHTTP2.Replace(strOutput, "$2$1")

Set objRegExpHTTP2 = Nothing
set objRegExpHTTP1 = Nothing
Set objRegExpEMail = Nothing

LinkString = strOutput
End Function
Avatar billede exp-ralle Nybegynder
03. september 2002 - 18:24 #2
Ok men i den første strOutput fx. hvad betyder $1 der ?
Avatar billede exp-ralle Nybegynder
03. september 2002 - 18:26 #3
Kan nemmerlig godt finde ud af at sætte en pattern så den ikke tillader at man skriver forkerte mails og links...

Men kan ikke lige hitte det med at erstatte ting med $1, $2 og $3.
Avatar billede eagleeye Praktikant
03. september 2002 - 18:57 #4
Dette er en lang streng som kan findes:

objRegExpHTTP2.Pattern = "(^|[^\/])(www[^\.\s]?\.[\w\._-]+\.[A-Za-z]{2,3}[\w\S]*)" 

Når man skriver det inde i ( ) så giver det en variable i replace delen $X starter fra 1. Så $1 er enten tom eller forskellig fra / :  (^|[^\/]) .. $2 er så hele linket: (www[^\.\s]?\.[\w\._-]+\.[A-Za-z]{2,3}[\w\S]*)

Så når man replacer så udskrift man $1$2  med det man skriver i replace.

strOutput = objRegExpHTTP2.Replace(strOutput, " $1<a href='http://$2' target='_blank'>$2</a> ")

Så hvis der står www.hej.dk så bliver det til:
<a href='http://www.hej.dk' target='_blank'>www.hej.dk</a>
Avatar billede exp-ralle Nybegynder
03. september 2002 - 18:57 #5
Kort sagt, fatter ikke det med $1 og $2...
Er $2 en rigtig værdi fra strOutput fra objRegExpHTTP1
og $1 en rigtig værdi fra strOutput fra objRegExpHTTP2 ?
Avatar billede exp-ralle Nybegynder
03. september 2002 - 18:58 #6
Glem min sidste kommentar...
Avatar billede exp-ralle Nybegynder
03. september 2002 - 19:00 #7
Hmm... $1 er altså det indenfor de første () og $2 den anden og $1$2 sammen er så begge da der kun er 2, og derfor hele linket.

Er dette rigtigt forstået?
Avatar billede eagleeye Praktikant
03. september 2002 - 19:04 #8
Ja det er det.
Avatar billede exp-ralle Nybegynder
03. september 2002 - 19:08 #9
Jaaaaaa, så er der bare lige 1 ting jeg ikke forstår...

Hvorfor er der et $1 i objRegExpHTTP2's Replace FØR <a>'en begynder?

Og så lige $1 i objRegExpHTTP1 er ikke den samme som $1 i objRegExpHTTP2 nødvendigvis (/udover hvis pattern'sne er ens) vel?
Avatar billede eagleeye Praktikant
03. september 2002 - 19:14 #10
Den er der hvis man skriver sit link inde i () eller andre karakter.:
(www.hej.dk)

Eller forsvinder det første (
Avatar billede eagleeye Praktikant
03. september 2002 - 19:15 #11
I princippet kunne den nok godt undværes men den anden som tjekker for link finde de links som er skrevet http://www.hej.dk og den anden finder dem som er skrevet som www.hej.dk  og nummer 2 må ikke finde dem som er i nummer 1 eller får man dobbelt links.
Avatar billede exp-ralle Nybegynder
03. september 2002 - 19:24 #12
Okay, du har (IGEN) reddet min dag *GG*
Du får pointene
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