Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Enigma di difficile risoluzione, qualcuno sa consigliarmi ? (RegEx)

    Ciao a tutti,

    Sul mio forum utilizzo una funzione con regex per la trasformazione dei links in hyperlinks html. La funzione in questione è la seguente:

    codice:
    Function formatLinkURL(strMessage)
      Dim objRegExp
      Dim strTemp
      Dim LinkURL
    
      Set objRegExp = New RegExp
    
      objRegExp.IgnoreCase = True
      objRegExp.Global = True
      objRegExp.Pattern = "(\b(www\.|http\://)\S+\b)"
      strTemp = objRegExp.replace(strMessage, "$1")
      formatLinkURL = Replace(strTemp, "http://http://","http://")
      Set objRegExp = Nothing
    End Function
    È davvero qualcosa di molto semplice, eppure c'è un problema che non riesco a risolvere.

    Ovvero se all'interno della variabile c'è un'immagine già formattata, tale funzione mi trasforma anche il percorso dell'immagine, creando confusione e quindi non facendo più funzionare nè il link, nè l'immagine.

    La soluzione potrebbe derivare dalla funzione di regex "lookbehind" e "lookahead", che mi permetterebbe di escludere i casi in cui il link sia preceduto da apici come nel caso del collegamento già hyperlinkato e nel caso dell'immagine... però sembra che codeste funzioni non siano implementate nel regex di VBScript.

    Qualcuno di voi ha una soluzione a questo problema ?

    Grazie 1000
    SGr33n

  2. #2
    Utente di HTML.it L'avatar di kluster
    Registrato dal
    Jul 2003
    Messaggi
    1,288
    forse non ho capito bene perchè mi sembra troppo semplice, non basta che tu specifichi che la stringa DEVE INIZIARE con il pattern?

    codice:
    Function formatLinkURL(strMessage)
      Dim objRegExp
      Dim strTemp
      Dim LinkURL
    
      Set objRegExp = New RegExp
    
      objRegExp.IgnoreCase = True
      objRegExp.Global = True
      objRegExp.Pattern = "(^\b(www\.|http\://)\S+\b)" 'aggiunto ^
      if objRegExp.test(strMessage) then 
     	 strTemp = objRegExp.replace(strMessage, "$1")
      	formatLinkURL = Replace(strTemp, "http://http://","http://")
      else
      	formatLinkURL = strMessage
      end if 
      Set objRegExp = Nothing
    End Function

  3. #3
    E viene convertito anche se si trova in mezzo al testo ?

    su un sito dice:

    ^ = Matches the position at the beginning of the input string
    SGr33n

  4. #4
    Non avevo letto la nota che avevi scritto inizialmente :P

    In effetti ^ non basta in quanto la stringa potrebbe anche essere

    codice:
    prova testo vai sul sito www.html.it vedi
    SGr33n

  5. #5
    Utente di HTML.it L'avatar di kluster
    Registrato dal
    Jul 2003
    Messaggi
    1,288
    si hai ragione
    tutto sta identificare cosa devi escludere
    forse con uno spazio
    (\s\b(www\.|http\://)\S+\b)
    o escludendo eventuali apici prima del bounders.
    Ora non ho modo di fare prove

  6. #6
    Utente di HTML.it L'avatar di kluster
    Registrato dal
    Jul 2003
    Messaggi
    1,288
    Prova cosi:

    codice:
    <%
    Function formatLinkURL(strMessage)
      Dim objRegExp
      Dim strTemp
      Dim LinkURL
    
      Set objRegExp = New RegExp
    
      objRegExp.IgnoreCase = True
      objRegExp.Global = True
      objRegExp.Pattern = "[\s](\b(www\.|http\://)\S+\b)"
      if objRegExp.test(strMessage) then 
     	 strTemp = objRegExp.replace(strMessage, "$1")
      	formatLinkURL = Replace(strTemp, "http://http://","http://")
      else
      	formatLinkURL = strMessage
      end if 
      Set objRegExp = Nothing
    End Function
    
    %>
    
    <%=formatLinkURL("poniamo che uno abbia messo un immagine del tipo [img][/img]")%>
    <%=formatLinkURL("vediamo se funzioni cosi http://forum.html.it/forum/images/vBulletin_logo.gif o cosi")%>
    [EDIT]
    pensandoci meglio forse è + completo questo
    codice:
    objRegExp.Pattern = "[^=""|='|=](\b(www\.|http\://)\S+\b)"
    'che vuol dire qualsiasi cosa basta che prima non ci sia
    =" o =' o =
    che ne dici? vedi un po'
    [/EDIT]

  7. #7
    Magari funzionasse ora lo provo e ti faccio sapere

    sarebbe una specie di lookbehind speriamo bene :P
    SGr33n

  8. #8
    Bugga cosa altro posso provare ???? caspita eppure su questo forum funziona alla perfezione, mannagg !!!!
    SGr33n

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.