[ASP] vervang url door link

Pagina: 1
Acties:

  • licensed
  • Registratie: Augustus 2002
  • Laatst online: 24-01 20:57
Ik ben nou al een tijdje met reguliere expressies in ASP aan het knoeien. Het werkt allemaal aardig, maar 1 ding kom ik echt niet uit. Zoeken op het internet geeft weinig resultaten en al helemaal geen bruikbare.

Het probleem is als volgt:

Met behulp van reguliere expressies wil ik urls in een string herkennen en deze omzetten naar een link die naar die url verwijst.
Dus: http://www.google.com --> <a href="http://www.google.com>http://www.google.com</a> (React kan het wel goed :D)

Ik probeer dit op de volgende manier te doen:
ASP:
1
2
3
4
5
6
7
8
9
10
11
dim newstr, matched
matched = regexMatch("\b(http://|www\.)[\w\.?=/\\#]+\b", tekst)

newstr = tekst
For Each m In matched
  newstr = regexReplace(newstr, "\b" & escape(m.Value) &_
"\b", "<a href='" & regexReplace("http://" &_
 m.Value, "(http://){2}", "http://") & "' target='_blank'>" &_
m.Value & "</a>")

Next


De functies die ik hiervoor gemaakt heb zijn:
ASP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Function regexReplace(source, expression, replaceWith)     
  dim regEx        
  Set regEx = New RegExp       
  regEx.Pattern = expression    
  regEx.IgnoreCase = True     
  regEx.Global = True      
  regexReplace = regEx.Replace(source, replaceWith)    
End Function       

Function regexMatch(expression, text)      
  dim regEx, Match, Matches        
  Set regEx = New RegExp 
  regEx.Pattern = expression
  regEx.IgnoreCase = True
  regEx.Global = True  
  Set Matches = regEx.Execute(text)
  For Each Match In Matches      
    RetStr = RetStr & Match.Value & ","        
  next     
  regexMatch = RetStr      
End Function     

Function escape(expressie)
  escape = regexReplace(expressie, "[\?]", "\?")
End Function


Dit gaat allemaal hartstikke goed, tenzij je bijvoorbeeld de volgende string als invoer geeft:

http://www.google.com/blablabla/typerdetyp.htm ........ http://www.google.com

In dit geval wil hij http://www.google.com in de url http://www.google.com/blablabla/typerdetyp.htm die inmiddels tot link gemaakt is nogmaals vervangen. Dit geeft een grote rommel.

Heeft iemand een idee hoe ik dit kan oplossen?
Alvast heel erg bedankt!

[ Voor 7% gewijzigd door licensed op 07-05-2003 19:01 ]


  • Flard
  • Registratie: Februari 2001
  • Laatst online: 20-08 14:34
Toevallig had ik nog een stukje liggen:

ASP.NET Visual Basic:
1
2
3
4
5
6
7
8
FBB = "tekst met links e.d."

' http://*.*.**
FBB = RegExReplace(FBB,"([\n ])http://([a-z0-9\-]+)\.([a-z0-9\-]+)\.([a-z0-9\-]+)([a-z0-9\-\.\\/]*)", "$1<A HREF=""http://$2.$3.$4$5"" TARGET=""_blank"">http://$2.$3.$4$5</A>")
' www.*.**
FBB = RegExReplace(FBB,"([\n ])www\.([a-z0-9\-]+)\.([a-z0-9\-]+)([a-z0-9\-\.\\/]*)", "$1<A HREF=""http://www.$2.$3$4"" TARGET=""_blank"">www.$2.$3$4</A>")
' *@*.*
FBB = RegExReplace(FBB,"([\n ])([a-z0-9\.\-_]+)@([a-z0-9\.\-_]+)\.([a-z]+)", "$1<A HREF=""mailto:$2@$3.$4"" TARGET=""_blank"">$2@$3.$4</A>")


Het is nooit 100% getest, maar ik denk dat je hier wel wat aan hebt...

  • CrashOne
  • Registratie: Juli 2000
  • Niet online

CrashOne

oOoOoOoOoOoOoOoOoOo

De jongens uit rolla hadden hier ook een mooi stukje code voor:

ASP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
Function InsertHyperlinks(inText)
Dim objRegExp, strBuf
Dim objMatches, objMatch
Dim Value, ReplaceValue, iStart, iEnd

  strBuf = ""
  iStart = 1
  iEnd = 1
  Set objRegExp = New RegExp

  objRegExp.Pattern = "\b(www|http|\S+@)\S+\b"  ' Match URLs and emails
  objRegExp.IgnoreCase = True                   ' Set case insensitivity.
  objRegExp.Global = True                       ' Set global applicability.
  Set objMatches = objRegExp.Execute(inText)
  For Each objMatch in objMatches
    iEnd = objMatch.FirstIndex
    strBuf = strBuf & Mid(inText, iStart, iEnd-iStart+1)
    If InStr(1, objMatch.Value, "@") Then
      strBuf = strBuf & GetHref(objMatch.Value, "EMAIL", "_BLANK")
    Else
      strBuf = strBuf & GetHref(objMatch.Value, "WEB", "_BLANK")
    End If
    iStart = iEnd+objMatch.Length+1
  Next
  strBuf = strBuf & Mid(inText, iStart)
  InsertHyperlinks = strBuf
End Function


Function GetHref(url, urlType, Target)
Dim strBuf

  strBuf = "<a href="""
  If UCase(urlType) = "WEB" Then
    If LCase(Left(url, 3)) = "www" Then
      strBuf = "<a href=""http://" & url & """ Target=""" & _
               Target & """>" & url & "</a>"
    Else
      strBuf = "<a href=""" & url & """ Target=""" & _
               Target & """>" & url & "</a>"
    End If
  ElseIf UCase(urlType) = "EMAIL" Then
    strBuf = "<a href=""mailto:" & url & """ Target=""" & _
             Target & """>" & url & "</a>"
  End If
  
  GetHref = strBuf

End Function

Huur mij in als freelance SEO consultant!


  • licensed
  • Registratie: Augustus 2002
  • Laatst online: 24-01 20:57
Jullie worden allebei hartstikke bedankt!! _/-\o_
'k ben blij dat het nu eindelijk werkt. :)

  • licensed
  • Registratie: Augustus 2002
  • Laatst online: 24-01 20:57
Mijn bovenstaande probleem is opgelost op 1 klein puntje na.

Als ik bijv. <a href="http://www.google.com">google</a> als invoer geef wordt http://www.google.com">google</a> een link.
Eigenlijk wil ik dat hij dit òf helemaal negeert òf alleen http://www.google.com tot link maakt.

De huidige reguliere expressie is:

ASP:
1
objRegExp.Pattern = "\b(www|http|\S+@)\S+\b"


Deze zou toch aan te passen moeten zijn zodat hij stop wanneer hij een '&quot' tegenkomt.

Heeft iemand een idee hoe ik dit kan doen?

  • CrashOne
  • Registratie: Juli 2000
  • Niet online

CrashOne

oOoOoOoOoOoOoOoOoOo

Je kan met een reguliere expressie kijken of er een bepaald teken aan komt en daarna met een simpel if'je kijken of het teken in de voorgaande reeks zat.

Huur mij in als freelance SEO consultant!


  • licensed
  • Registratie: Augustus 2002
  • Laatst online: 24-01 20:57
CrashOne schreef op 08 May 2003 @ 19:04:
Je kan met een reguliere expressie kijken of er een bepaald teken aan komt en daarna met een simpel if'je kijken of het teken in de voorgaande reeks zat.
Het klinkt heel eenvoudig, maar ik zou niet weten hoe ik dat moet doen...
Zelf dacht ik de reguliere expressie aan te passen, maar dat is me nog niet geluk. Ik kan de reguliere expressie wel zo aanpassen dat het binnen de <a> tag goed gaat, maar dan gaat het niet goed bij 'kale' urls...
Pagina: 1