webForumDet fria alternativet

RegExp - Länkar

ASP

7 svar · 658 visningar · startad av Sasch

Medlem sedan nov. 2002830 inlägg
Frågan#1

Alltså jag har redan en drös med regexp - koder (som helt säkert hade kunnat effektiviseras rätt hårt.

	 Function bbCode(Str)

	     Set objRE = New RegExp
	     objRE.Global = True
	     objRE.IgnoreCase = True
		  objRE.Pattern="\[b\]([\w\W]*?)\[/b\]"
		  Str = objRE.Replace(Str,"<strong>$1</strong>")
	     Set objRE = Nothing

	     Set objRE = New RegExp
	     objRE.Global = True
	     objRE.IgnoreCase = True
		  objRE.Pattern="\[i\]([\w\W]*?)\[/i\]"
		  Str = objRE.Replace(Str,"<em>$1</em>")
	     Set objRE = Nothing

	     Set objRE = New RegExp
	     objRE.Global = True
	     objRE.IgnoreCase = True
		  objRE.Pattern="\[s\]([\w\W]*?)\[/s\]"
		  Str = objRE.Replace(Str,"<span style=""text-decoration: line-through;"">$1</span>")
	     Set objRE = Nothing

	     Set objRE = New RegExp
	     objRE.Global = True
	     objRE.IgnoreCase = True
		  objRE.Pattern="\[mailto\]([\w\W]*?)\[/mailto\]"
		  Str = objRE.Replace(Str,"<a href=""mailto:$1"">$1</a>")
	     Set objRE = Nothing

	     Set objRE = New RegExp
	     objRE.Global = True
	     objRE.IgnoreCase = True
		  objRE.Pattern="\[url\]([\w\W]*?)\[/url\]"
		  Str = objRE.Replace(Str,"<a href=""http://$1"">$1</a>")
	     Set objRE = Nothing

	     Set objRE = New RegExp
	     objRE.Global = True
	     objRE.IgnoreCase = True
		  objRE.Pattern="\[img\]([\w\W]*?)\[/img\]"
			IF left(lCase("&$1&"),7) = "http://" Then
			     Str = objRE.Replace(Str,"<a href=""$1""><img src=""$1"" border=""0"" alt=""inlänkad bild"" /></a>")
			Else
			     Str = objRE.Replace(Str,"<a href=""http://$1""><img src=""http://$1"" border=""0"" alt=""inlänkad bild"" /></a>")
			End IF
	     Set objRE = Nothing
	     bbCode = Str

	End Function

Men det är inte det som är problemet. Problemet ligger i att knasar till mina länkar. För visst borde man kunna skriva www.någonstans.se och http://www.någonstans.se och få samma output på länken?

I nuläget så fungerar det egentligen bara att skriva www.någonstans.se för när man använder http:// framför så ger den följande output:
http://http//www.någonstans.se och det är ju otrevligt

	     Set objRE = New RegExp
	     objRE.Global = True
	     objRE.IgnoreCase = True
		  objRE.Pattern="\[url\]([\w\W]*?)\[/url\]"
		  Str = objRE.Replace(Str,"<a href=""http://$1"">$1</a>")
	     Set objRE = Nothing

Jag testade med ifsatser i men det verkade inte som det ville fungera speciellt det heller.

	     Set objRE = New RegExp
	     objRE.Global = True
	     objRE.IgnoreCase = True
		  objRE.Pattern="\[url\]([\w\W]*?)\[/url\]"
		IF left(lCase("$1"),13) = "http://" Then
		  Str = objRE.Replace(Str,"<a href=""$1"">$1</a>")
		Else
		  Str = objRE.Replace(Str,"<a href=""http://$1"">$1</a>")
		End IF
	     Set objRE = Nothing
Medlem sedan nov. 2002830 inlägg
#2

Det var tydligen så enkelt som att göra på följande vis:

	     Set objRE = New RegExp
	     objRE.Global = True
	     objRE.IgnoreCase = True
		  objRE.Pattern="\[url\]([\w\W]*?)\[/url\]"

		  Str = objRE.Replace(Str,"<a href=""$1"">$1</a>")

	     Set objRE = Nothing

Fråga 2 då, hur omvandlar man / http://www med hjälp av regexp?

Medlem sedan juni 20019 519 inlägg
#3

Det är bara att utveckla vidare från ditt befintliga uttryck

		  objRE.Pattern="\[url=([\w\W]*?)\]"
		  Str = objRE.Replace(Str,"<a href=""$1"">$1</a>")
Medlem sedan nov. 2002830 inlägg
#4

Skulle man då kunna skriva (för Olles sida[/ url] ):

     objRE.Pattern="\[url=([\w\W]*?)\](\*?)\[/url\]"
     Str = objRE.Replace(Str."<a href=""$1"">$2</a>")

?

För jag misstänker att för varje ? man har så blir det ytterligare en $1 (efter 1, 2 osv...), eller har jag fel?

Medlem sedan juni 20019 519 inlägg
#5

vare () är en grupp om du inte skriver (?:) och varje grupp är vad du kallar $x (där x är träffen)

du vill nog ändra uttrycket lite:

objRE.Pattern="\[url=([\]]+)\](.*?)\[/url\]"

bör fungera för dig.

Medlem sedan nov. 2002830 inlägg
#6

Hmm, nej, det verkar inte som att den vill alls med det uttrycket.

[Forumet[ /url]

Varför byta ut ([\w\W]*?)?

Det fungerade tydligen finfint med:

     objRE.Pattern="\[url=([\w\W]*?)\](.*?)\[/url\]"

Men jag förstår fortfarande inte riktigt vad du vill komma åt med ([\]]+)?](http://www.adress.se/forum_thread.asp?fId=19&tId=612)

Medlem sedan juni 20019 519 inlägg
#7

varför kör du den i huvudtaget?
varför jag byter ut det mot uttrycket är för att då skall den ta alla tecken som INTE är] vilket är korrekt i ditt fall.

Dim subjectString
SubjectString = "[url=http://www.adress.se/forum_thread.asp?fId=19&tId=612]Forumet[/url]"
Dim myRegExp, ResultString
Set myRegExp = New RegExp
myRegExp.IgnoreCase = True
myRegExp.MultiLine = True
myRegExp.Global = True
myRegExp.Pattern = "\[url=([\w\W]*?)\](.*?)\[/url\]"
ResultString = myRegExp.Replace(SubjectString, "<a href=""$1"">$2</a>")

fungera för mig med klassisk ASP.

Medlem sedan nov. 2002830 inlägg
#8
\[url=([\w\W]*?)\](.*?)\[/url\]

Jo, denna kodsnutt fungerar utan några som helst problem för min del med, men det är ([\]]+) som inte fungerar för min del. Den hoppar bara över länken med den (eller BBCode emulationen om man nu vill det) då jag använder den vilket fick mig att gå tillbaka till ([\w\W]*?)\.

Edit: Åhhh! Naturligtvis, vad dum jag är. Dumt formulerat problem resulterar ju naturligtvis i felaktigt svar oavsett hur riktigt svaret må vara! Haha, mycket tack ska du ha ändå eftersom du ändå löste mitt problem :birp

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