webForumDet fria alternativet

Köra en funktion i ett Regular Expression

ASP

4 svar · 268 visningar · startad av edebro

Medlem sedan aug. 2001261 inlägg
Frågan#1

Min kod ser ut så här:

<%
' funktion som gör om text till korrekt formaterad kod
Function formatText(arg)
	Dim editText, objRegExp
	editText = Server.HTMLEncode(arg)
	
	Set objRegExp = New RegExp
	objRegExp.Pattern = "\[USER\](.*?)\[\/USER\]"
	objRegExp.IgnoreCase = True
	objRegExp.Global = True
	
	editText = objRegExp.Replace(editText, "<FONT COLOR=GREEN>$1</FONT>")
	
	Set objRegExp = Nothing
	
	formatText = editText
	
End Function

strHTML = "[USER]dk[/USER]l asjkd [USER]fjwlekj asklf jasdf [/USER]j"

Response.Write formatText(strHTML)
%>

Det jag skulle vilja göra är att anropa en annan funktion i objRegExp.Replace, ungefär så här:

editText = objRegExp.Replace(editText, annanFunktion($1))

Men det vill inte fungera. Är det nån som vet hur man löser detta, om det går dvs?

Medlem sedan aug. 2001261 inlägg
#2

ingen som vet?

Medlem sedan dec. 19998 577 inlägg
#3

Fråga: Vad exakt är det som inte fungerar, och får du ett felmeddelande?

Mvh, Vide

Medlem sedan aug. 2001261 inlägg
#4

Vide: kontrar med en annan fråga. Du vet altså att det ska gå att köra en funktion tillsammans med en Replace sats i Regular Expressions

Jag får felmeddelandet:

Feltyp:
Kompileringsfel i Microsoft VBScript (0x800A0408)
Ogiltigt tecken
/test3.asp, line 12, column 53

Och hela min kod ser nu ut så här:

<%
' funktion som gör om text till korrekt formaterad kod
Function formatText(arg)
	Dim editText, objRegExp
	editText = Server.HTMLEncode(arg)
	
	Set objRegExp = New RegExp
	objRegExp.Pattern = "\[USER\](.*?)\[\/USER\]"
	objRegExp.IgnoreCase = True
	objRegExp.Global = True
	
	editText = objRegExp.Replace(editText, annanFunktion($1))
	
	Set objRegExp = Nothing
	
	formatText = editText
	
End Function

Function annanFunktion(arg)
	Dim strTexten
	strTexten = "<FONT SIZE=4>" & arg & "</FONT>"
	
	annanFunktion = strTexten
End Function

strHTML = "[USER]dk[/USER]l asjkd [USER]fjwlekj asklf jasdf [/USER]j"

Response.Write formatText(strHTML)
%>
Medlem sedan dec. 19998 577 inlägg
#5

$1 är ju bara en positionsangivelse som ger regexp möjlighet att lägga in strängen som skall ersättas, $1 är inte någon variabel och måste således ligga mellan "".

Så jag är skeptisk till att det kommer att fungera, men det betyder inte att det inte gör det, så testa med en $1 som sträng istället.

264 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
118 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)