webForumDet fria alternativet

regExp.Pattern-kombination

24 svar · 946 visningar · startad av Palle

PalleMedlem sedan apr. 20003 174 inlägg
#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]
m_soderlundMedlem 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.. :(

PalleMedlem 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]
m_soderlundMedlem 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?

PalleMedlem sedan apr. 20003 174 inlägg
#5

Japp det kan man. :)

m_soderlundMedlem sedan sep. 20026 425 inlägg
#6

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

CalevanMedlem 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...

m_soderlundMedlem 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]")
%>
CalevanMedlem 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?

PalleMedlem sedan apr. 20003 174 inlägg
#10

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

CalevanMedlem 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

PalleMedlem 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:

CalevanMedlem 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!

PalleMedlem 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. :)

CalevanMedlem 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!

PalleMedlem 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? ;)

CalevanMedlem 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?

PalleMedlem 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]
CalevanMedlem sedan maj 20031 173 inlägg
#19

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

tackar

PalleMedlem sedan apr. 20003 174 inlägg
#20

np! :bire

135 ms totalt · 3 externa anrop · v20260731065814-full.86db40fa
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)