- Home
- Categorie
- Coding e Sistemistica
- Altri linguaggi per il web
- Editor in ASP con regular expressions
-
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 = TrueobjRegExp.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]")%>
-
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...
-
Ho fatto qualche prova oggi a lavoro, ma a me funzionava in tempi rapidi... Non ho riscontrato grossi rallentamenti...