webForumDet fria alternativet

regExp.Pattern-kombination

ASP

24 svar · 947 visningar · startad av Palle

Medlem sedan apr. 20003 174 inlägg
Frågan#1

Jag har en regExp-funktion som omvandlar http:// till länkar, denna funktion
skulle jag nu vilja kombinera med en [ url=länk]länktext-funktion också..

Eftersom jag inte är så hajj på detta med regExp så undrar jag nu hur jag
ska modifiera mina pattern för att få det att fungera i en och samma funktion?

De två nuvarande:

[red]regExp.Pattern = "((?:mailto\:|(?:news|(?:ht|f)tp(?:s?))\://){1}\S+)"

regExp.Pattern = "\[url=(.*)\](.*)\[/url\]" [/red]
Medlem sedan sep. 20026 425 inlägg
#2

Kanske vore denna funktion något att bygga vidare på:

<%
Function FCode(str)

str = Replace(str,"<","&lt;")
str = Replace(str,VbCrLf,"<br />")

Set objRE = New regexp
objRE.Global = true
objRE.IgnoreCase = true

[red]'start citering
objRE.Pattern = "\[citat=(.*?)](\w\s)*"
str = objRE.Replace(str,"<br />[citat=$1]")

objRE.Pattern = "\[citat=(.*?)]"
str = objRE.Replace(str,"<blockquote><b>$1</b> skrev:<hr /><span class=""citat"">")

objRE.Pattern = "\[citat\](\w[åäö]*\s[åäö]*)*"
str = objRE.Replace(str,"<blockquote><br /><span class=""cit"">Citat:</span><hr /><span class=""citat"">$1")

objRE.Pattern = "\[/citat\]"
str = objRE.Replace(str,"</span><hr /></blockquote>")
'slut citering[/red]

'start kod
objRE.Pattern = "\[kod\]"
str = objRE.Replace(str,"<blockquote><span class=""kod"">Kod:<hr />")

objRE.Pattern = "\[/kod\]"
str = objRE.Replace(str,"<hr /></span></blockquote>")
'slut kod

objRE.Pattern = "\[(b|/b|i|/i|u|/u)\]"
str = objRE.Replace(str,"<$1>")

[red]
'fixa länkar och e-postadresser
objRE.Pattern = "([url]www.[/url][^ ]*[a-z])|([url]http://[/url][^ ]*[a-z])"
str = objRE.Replace(str,"<a href=""$1$2"" target=""_blank"">$1$2</a>")
[/red]

'buggfixningar
str = Replace(str,"""www","""http://www")
str = Replace(str,"""http://www""","""www""")

str = Replace(str,"<br""","""")
str = Replace(str,"<br</a> />","</a><br />")

str = Replace(str,"</span><hr""","""")
str = Replace(str,"</span><hr</a> />","</a></span><hr />")

str = Replace(str,"<blockquote><span""","""")
str = Replace(str,"<blockquote><span</a>","</a><span")
str = Replace(str,"</b</a>>","</b>")
'slut

[red]objRE.Pattern = "([\w~\-\.]+@[\w~\-\.]+[a-z])"
str = objRE.Replace(str,"<a href=""mailto:$1"">$1</a>")
'slut länkar och e-postadresser[/red]

Set objRE = Nothing

Fcode = str
End Function
%>

Kolla extra mycket på den röda koden, kanske kan hjälpa dig lite grann? En sökning på wF ger en hel del, men ej det man önskar.. :(

Medlem sedan apr. 20003 174 inlägg
#3

Nja.. gav inte så mycket tyvärr..

Gjorde istället om javascript-funktionen som printar ut länkarna så att när man
vill använda [ url=länk]länktext så tas inte http :// med i länken.. :)

[red]regExp.Pattern = "((?:mailto\:|(?:news|(?:ht|f)tp(?:s?))\://){1}\S+)"
str = regExp.Replace(str, "<a href=""redir.asp?url=$1"">$1</a>")
				
regExp.Pattern = "\[url=(.*)\](.*)\[/url\]" 
makeOutput = regExp.Replace(str, "<a href=""redir.asp?url=[b]http://[/b]$1"">$2</a>")[/red]
Medlem sedan sep. 20026 425 inlägg
#4

Det är bra Palle. :D
Men kan man nu använda både [url=nått]beskrivning[/url] och skriva vanliga länkar med hjälp av din kod?

Medlem sedan apr. 20003 174 inlägg
#5

Japp det kan man. :)

Medlem sedan sep. 20026 425 inlägg
#6

Tjohoo, *lägger till denna tråd i min länksamling*.

Medlem sedan maj 20031 173 inlägg
#7

Är det möjligt att få någon som förklarar regExp.Pattern och hur man inplementerar denna kod på sin sida? för det verkar vara precis det jag vill göra...

Medlem sedan sep. 20026 425 inlägg
#8
Function Fix(str)

Set objRE = New regexp
objRE.Global = true
objRE.IgnoreCase = true

regExp.Pattern = "((?:mailto\:|(?:news|(?:ht|f)tp(?:s?))\://){1}\S+)"
str = regExp.Replace(str, "<a href=""redir.asp?url=$1"">$1</a>")
				
regExp.Pattern = "\[ url=(.*)\](.*)\[/url\]" 
makeOutput = regExp.Replace(str, "<a href=""redir.asp?url=http://$1"">$2</a>")

Fix = str
End Function

_UTAN_ mellanslag i sista regExp.Pattern i [ url..

<%
Response.Write Fix("Hej hopp - detta är en länk: [ url=http://www.webforum.hel.nu]klick[/url]")
%>
Medlem sedan maj 20031 173 inlägg
#9

okey, jag är total nybörjare på det här, och jag fick inte det ovan att funka... men jag kanske bara är dum?

Medlem sedan apr. 20003 174 inlägg
#10

På vilket sätt fick du inte koden att fungera?
Fick du något felmeddelande?

Medlem sedan maj 20031 173 inlägg
#11
<html>
<%
Function Fix(str)

Set objRE = New regexp
objRE.Global = true
objRE.IgnoreCase = true

regExp.Pattern = "((?:mailto\:|(?:news|(?:ht|f)tp(?:s?))\://){1}\S+)"
str = regExp.Replace(str, "<a href=""redir.asp?url=$1"">$1</a>")
				
regExp.Pattern = "\[ url=(.*)\](.*)\[/url\]" 
makeOutput = regExp.Replace(str, "<a href=""redir.asp?url=http://$1"">$2</a>")

Fix = str
End Function
%>
<head>
<title>Lite text</title>
</head>
<body>
<p>Lite text.</p>
<% Response.Write Fix("Hej hopp - detta är en länk: [url=http://www.webforum.hel.nu]klick[/url]") %>
</body>
</html>

Felmedelande:

Lite text.

Microsoft VBScript runtime error '800a000d'

Type mismatch: '[string: "Hej hopp - detta är "]'

/kommitteer/pyrot/fredrik/index.asp, line 30

Medlem sedan apr. 20003 174 inlägg
#12

Aha, när det är ju inte så konstigt ser jag.. är en del fel i koden som m_soderlund postade. ;)

Bifogar här en fungerande kod i TXT-format, detta eftersom wF ändrar en del i koden.

Testa denna istället:

Medlem sedan maj 20031 173 inlägg
#13

Man tackar! det funkar utmärkt, nu ska jag bara försöka få in detta i mitt lilla projekt som jag pysslar med. Och eftersom det är tentavecka nu har jag gott om tid :)

tack!

Medlem sedan apr. 20003 174 inlägg
#14

Gutt mos! :bire

Du kan placera funktionen vart du vill på sidan, den behöver inte ligga i samband med
där den ska användas och du kan anropa den på flera ställen i din kod.

Bara att höra av sig igen vettu om du kör fast. :)

Medlem sedan maj 20031 173 inlägg
#15

hmmm, då passar jag på att fråga direkt!

i funktionen står följande rad:

makeOutput = regExp.Replace(str, "<a href=""redir.asp?url=http://$1"">$2</a>")

Nu är det så att jag vill att länken ska gå till en address som är definierad i de två variablerna "path" och "katalog" och sen det som står i url nedan:
[ url=www.webforum.nu]LÄNK

så path innehåller:
http://www.minsida.se/
katalog:
2003/idag/
och i [url= står det
minsida.asp

eftersom jag inte vet vad $1 och $2 betyder i ursprungskoden har jag lite svårt med att modifiera denna...

tack!

Medlem sedan apr. 20003 174 inlägg
#16

Om du kollar på det pattern som vi använder:

[red]regExp.Pattern = "\&#91;url=(.*)\](.*)\[/url\]" [/red]

I ett pattern definerar man det man söker efter, i detta fall är det koden [url=XXX]YYY som vi söker efter och vill modifiera.

$1 ger oss värdet från den första grupperingen, XXX i vårt lilla exempel. -------^
$2 ger oss värdet från den andra grupperingen, YYY.

Med Replace ersätter vi sedan $1 med själva URL´n och $2 med det som formar texten i länken..

[red]regExp.Replace(str, "<a href=""[b]$1[/b]"">[b]$2[/b]</a>")[/red]

Hänger du med? ;)

Medlem sedan maj 20031 173 inlägg
#17

ah, ok! då är jag med på den biten. Nu har jag litte fnutt problem. I denna koden:

regExp.Replace(str, "<a href=""$1"">$2</a>")

vill jag få in innehållet i en variabel före $1 och det verkar stört omöjligt för mig med alla dessa fnuttar överallt. något tips?

Medlem sedan apr. 20003 174 inlägg
#18

Ok, får vi se om jag förstod vad du menade.. ;)

Så här:

[red]regExp.Replace(str, "<a href=""[blue]"& variabel &"[/blue]$1"">$2</a>")[/red]
Medlem sedan maj 20031 173 inlägg
#19

Denna fnuttdjungel, där var en kombination jag inte provade. Den fungerade utmärkt!

tackar

Medlem sedan apr. 20003 174 inlägg
#20

np! :bire

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