• User Newbie

    Editor in ASP con regular expressions

    Salve a tutti!

    Ho creato un'applicazione web con un piccolo editor le cui funzioni sono analoghe a quelle di questo forum, vale a dire corsivo, grassetto, sottolineato, immagine, url e elenco a più voci.

    La suddetta applicazione non dà alcun problema di codice, cioè è sintatticamente corretta, ma non appena avvio lo script che la richiama, non riesce a cavare piede da un caricamento che pare infinito. I problemi sorgono, tuttavia, quando inserisco i tag che in questo forum possono essere definiti come (url) e (/url) e (img)(/img) tra parentesi quadre. C'è un'eccezione però: per url elementari e immagini composte da pochi caratteri, lo script non va in timeout.

    Lo script è basato sull'utilizzo delle regular expressions, che funzionano benissimo fin quando la funzione bbcode_new testa una stringa inserita direttamente da codice, ma usando un editor con tanto di casella di testo e pulsante di invio, il caricamento, nei casi citati, è praticamente infinito.

    Potete aiutarmi? Posto di seguito il codice.

    <%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
    <%
    function bbcode_new(argStrText)
    Dim objRegExp
    Set objRegExp = New Regexp
    objRegExp.IgnoreCase = True
    objRegExp.Global = True

    objRegExp.Pattern = "[allinea=(centro)]"
    argStrText = objRegExp.Replace(argStrText, "<div style=""text-align:center"">")	
    
    objRegExp.Pattern = "[allinea=(destra)]"
    argStrText = objRegExp.Replace(argStrText, "<div style=""text-align:right"">")	
    
    objRegExp.Pattern = "[allinea=(sinistra)]"
    argStrText = objRegExp.Replace(argStrText, "<div style=""text-align:left"">")	
    
    objRegExp.Pattern = "[\/allinea]"
    argStrText = objRegExp.Replace(argStrText, "</div>")
    
    objRegExp.Pattern = "[car=(rosso),([0-9]{1,2}),(arial|verdana|times new roman|ms sans serif)]"
    argStrText = objRegExp.Replace(argStrText, "<font color=red size=""$2"" face=""$3"">")
    	
    objRegExp.Pattern = "[car=(verde),([0-9]{1,2}),(arial|verdana|times new roman|ms sans serif)]"
    argStrText = objRegExp.Replace(argStrText, "<font color=green size=""$2"" face=""$3"">")
    
    objRegExp.Pattern = "[car=(giallo),([0-9]{1,2}),(arial|verdana|times new roman|ms sans serif)]"
    argStrText = objRegExp.Replace(argStrText, "<font color=yellow size=""$2"" face=""$3"">")
    
    objRegExp.Pattern = "[car=(blu),([0-9]{1,2}),(arial|verdana|times new roman|ms sans serif)]"
    argStrText = objRegExp.Replace(argStrText, "<font color=blue size=""$2"" face=""$3"">")
    
    objRegExp.Pattern = "[car=(rosa),([0-9]{1,2}),(arial|verdana|times new roman|ms sans serif)]"
    argStrText = objRegExp.Replace(argStrText, "<font color=pink size=""$2"" face=""$3"">")
    
    objRegExp.Pattern = "[car=(fucsia),([0-9]{1,2}),(arial|verdana|times new roman|ms sans serif)]"
    argStrText = objRegExp.Replace(argStrText, "<font color=magenta size=""$2"" face=""$3"">")
    
    objRegExp.Pattern = "[car=(celeste),([0-9]{1,2}),(arial|verdana|times new roman|ms sans serif)]"
    argStrText = objRegExp.Replace(argStrText, "<font color=cyan size=""$2"" face=""$3"">")
    
    objRegExp.Pattern = "[\/car]"
    argStrText = objRegExp.Replace(argStrText, "</font>")
    

    ' objRegExp.Pattern = "[(/)?(B|I|U|UL|LI)]"
    ' argStrText = objRegExp.Replace(argStrText, "<$1$2>")

    objRegExp.Pattern = "[(/)?(GR)]"
    argStrText = objRegExp.Replace(argStrText, "<$1b>")
    
    objRegExp.Pattern = "[(/)?(COR)]"
    argStrText = objRegExp.Replace(argStrText, "<$1i>")
    
    objRegExp.Pattern = "[(/)?(SOT)]"
    argStrText = objRegExp.Replace(argStrText, "<$1u>")
    
    objRegExp.Pattern = "[(/)?(BAR)]"
    argStrText = objRegExp.Replace(argStrText, "<$1s>")
    
    objRegExp.Pattern = "[(/)?(ELENCO)]"
    argStrText = objRegExp.Replace(argStrText, "<$1ul>")
    
    objRegExp.Pattern = "[(/)?(VOCE)]"
    argStrText = objRegExp.Replace(argStrText, "<$1li>")
    
    'A CAPO	
    
    objRegExp.Pattern = "[a_capo]"
    argStrText = objRegExp.Replace(argStrText, "
    

    ")

    'LINK	
    
    objRegExp.Pattern = "[link=([a-z0-9._-]{1,100})+\.([a-z0-9._-]{1,100})+\.([a-z]{2,4})+(/*([a-z0-9._-]{1,100})*(.([a-z0-9._-]{2,5}))*)?(,stesso)]"
    argStrText = objRegExp.Replace(argStrText, "<a href=""http://$1.$2.$3$4"" target=_self>")
    
    objRegExp.Pattern = "[link=([a-z0-9._-]{1,100})+\.([a-z0-9._-]{1,100})+\.([a-z]{2,4})+(/*([a-z0-9._-]{1,100})*(.([a-z0-9._-]{2,5}))*)?(,nuovo)]"
    argStrText = objRegExp.Replace(argStrText, "<a href=""http://$1.$2.$3$4"" target=_blank>")
    
    objRegExp.Pattern = "[\/link]"
    argStrText = objRegExp.Replace(argStrText, "</a>")
    
    ' IMMAGINE
    
    objRegExp.Pattern = "[img=([a-z0-9._-]{1,100})+\.([a-z0-9._-]{1,100})+\.([a-z]{2,4})+(/*([a-z0-9._-]{1,100})*(.([a-z0-9._-]{2,5}))*)?,(([0-9]{1,4})(%)?),(([0-9]{1,4})(%)?),(([0-9]{1,4})(%)?)(,destra)]"
    argStrText = objRegExp.Replace(argStrText, "![image]()")
    
    objRegExp.Pattern = "[img=([a-z0-9._-]{1,100})+\.([a-z0-9._-]{1,100})+\.([a-z]{2,4})+(/*([a-z0-9._-]{1,100})*(.([a-z0-9._-]{2,5}))*)?,(([0-9]{1,4})(%)?),(([0-9]{1,4})(%)?),(([0-9]{1,4})(%)?)(,centro)]"
    argStrText = objRegExp.Replace(argStrText, "![image]()")
    
    objRegExp.Pattern = "[img=([a-z0-9._-]{1,100})+\.([a-z0-9._-]{1,100})+\.([a-z]{2,4})+(/*([a-z0-9._-]{1,100})*(.([a-z0-9._-]{2,5}))*)?,(([0-9]{1,4})(%)?),(([0-9]{1,4})(%)?),(([0-9]{1,4})(%)?)(,sinistra)]"
    argStrText = objRegExp.Replace(argStrText, "![image]()")
    
    objRegExp.Pattern = "[img=([a-z0-9._-]{1,100})+\.([a-z0-9._-]{1,100})+\.([a-z]{2,4})+(/*([a-z0-9._-]{1,100})*(.([a-z0-9._-]{2,5}))*)?,(([0-9]{1,4})(%)?),(([0-9]{1,4})(%)?),(([0-9]{1,4})(%)?)(,alto)]"
    argStrText = objRegExp.Replace(argStrText, "![image]()")
    
    objRegExp.Pattern = "[img=([a-z0-9._-]{1,100})+\.([a-z0-9._-]{1,100})+\.([a-z]{2,4})+(/*([a-z0-9._-]{1,100})*(.([a-z0-9._-]{2,5}))*)?,(([0-9]{1,4})(%)?),(([0-9]{1,4})(%)?),(([0-9]{1,4})(%)?)(,basso)]"
    argStrText = objRegExp.Replace(argStrText, "![image]()")
    
    set objRegExp = Nothing
    
    bbcode_new = argStrText
    

    End Function
    %>
    <% response.write bbcode_new("[car=blu,7,arial][allinea=centro][link=www.siforge.org/articles/2002/09/22-regex.html,nuovo]Ciao[/link] da parte mia[/car][img=www.magicocagliari.it/loghi/newlogo3.jpg,100%,100%,0,basso][/allinea][a_capo][car=verde,3,arial]Questo è il mio script[/gr][/car][a_capo][car=fucsia,2,verdana][cor][sot]Che codifica il linguaggio HTML[/cor][/sot][/car][a_capo][elenco][voce]QUESTA è LA PRIMA VOCE[/voce][voce][bar]QUESTA è LA SECONDA VOCE[/bar][/voce][voce]QUESTA è LA TERZA VOCE[/voce][/elenco]")%>


  • User Attivo

    Appena ho un po' di tempo lo provo e vedo se trovo qualcosa...

    Cmq tieni conto che le RegEx sono piu' lente di altri metodi, soprattutto se non sono compilate. Io ti consiglio quando puoi di fare cosi'

    argStrText.Replace("[allinea=(sinistra)]", "<div style=""text-align:left"">");

    e di lasciare le RegEx solo per i casi piu' complessi, tipo i font, le liste e il resto...


  • User Attivo

    Ho fatto qualche prova oggi a lavoro, ma a me funzionava in tempi rapidi... Non ho riscontrato grossi rallentamenti...