webForumDet fria alternativet

Regular Expression

13 svar · 1 431 visningar · startad av Asa

AsaMedlem sedan dec. 20011 860 inlägg
#1

Har liten kod som används att snickra sin egna sida och hur undra jag om hur man skall skriva för att få det som jag vill.

Har en tagg där man ska kunna fylla i 4 värden i. Sista värdet ska vara left,right eller center. Ex: [box2=100px,#ffffff,#000000,center]

Nu undrar jag hur man får in en ifsats som kollar om värde nr 4 är left,right eller center och väljer rätt replacekod. Se nedan hur jag vill det ska va men ej vet hur man skriver i reg Exp.

regExp.Pattern = "\[box2=(.*?),(.*?),(.*?),(.*?)\]"
if $4 = "center" then
      strText = regExp.Replace(strText,"<div style=""margin:0 auto 0 auto;border:1px solid $3; width:$1;background-color:$2;padding:10px;margin-bottom:5px;"">")
else
      strText = regExp.Replace(strText,"<div style=""float:$4;margin-left:0px; border:1px solid $3; width:$1;background-color:$2;padding:10px;margin-bottom:5px;"">")
End if
voigtann1Medlem sedan juni 20019 519 inlägg
#2

du få kolla match grupp och sen kolla den i ett regex collection objekt.

men annars sätt fjärde regex gruppen till (center|right|left) istället för din .*?

AsaMedlem sedan dec. 20011 860 inlägg
#3

Hur skriver man det då? Är olika style kod som används om det är
center
eller
right och left

prplxrMedlem sedan juni 2012582 inlägg
#4

Hej, Åsa!

Jag har inte skrivit många rader VBscript de senaste tio åren, men jag gör ett försök. Inga garantier med andra ord!

regExp.Pattern = "\[box2=(.*?),(.*?),(.*?),(.*?)\]"

rMatches = regExp.Execute(strText)

For Each rMatch In rMatches
    position = rMatch.SubMatches(3) ' Här finns center/left/right
    If position = "center" Then
        strText = regExp.Replace(strText,"<div style=""margin:0 auto 0 auto;border:1px solid $3; width:$1;background-color:$2;padding:10px;margin-bottom:5px;"">")
    Else
        strText = regExp.Replace(strText,"<div style=""float:$4;margin-left:0px; border:1px solid $3; width:$1;background-color:$2;padding:10px;margin-bottom:5px;"">")
    End If
Next
voigtann1Medlem sedan juni 20019 519 inlägg
#5

prplxr kommer inte riktigt fungera, då du kommer bara kontrollera den första box2 och köra replace mot den (efter det så har du ersatt alla box2 "taggar".

Sen vill du nog köra lcase på postion så man inte skriver CeNtEr ;)

prplxrMedlem sedan juni 2012582 inlägg
#6

voigtann1 skrev:

prplxr kommer inte riktigt fungera, då du kommer bara kontrollera den första box2 och köra replace mot den (efter det så har du ersatt alla box2 "taggar".

Sen vill du nog köra lcase på postion så man inte skriver CeNtEr ;)

Jag hade på känn att det var något jag missade men kunde inte riktigt sätta fingret på vad. Får göra om min kodsnutt lite. Som sagt, är väldigt ringrostig.

CompusaMedlem sedan jan. 20023 327 inlägg
#7

Ojdå, klassisk ASP med vbscript?
Dags att byta teknik snart :e

AsaMedlem sedan dec. 20011 860 inlägg
#8

Ja, men det är bara en vän som vill ha så. Håller nästan helt på med php nuförtiden.

AsaMedlem sedan dec. 20011 860 inlägg
#9

Kunde någon komma med en kod som fungerade med flera box2?

voigtann1Medlem sedan juni 20019 519 inlägg
#10

kolla vad rMatch innehåller Åsa, du har svaret framför dig mer eller mindre. Men hade även nog kollat upp om du inte skall matcha en öppen och en stängning av en tagg, du kommer annars få rätt stora problem med att du kan avluta med x antal [/box2] och förstöra din hemsida.

AsaMedlem sedan dec. 20011 860 inlägg
#11

Hm, okej men jag har typ noll koll på hur man ska göra ialalfall fast jag har svaret framför mig. Jag som har IQ fiskmås kanske?! :/

Vet inte alls hur man skall göra detta då. Har alltid bett om hjälp med det jag ej fattar med Regular Expression så har aldrig lärt mig det.

AsaMedlem sedan dec. 20011 860 inlägg
#12

Kunde man få ta del av det du skrivit voigtann1?

voigtann1Medlem sedan juni 20019 519 inlägg
#13
Function Box2(byval str)
    Dim re, rMatches
    Set re = new RegExp
    re.IgnoreCase = true
    re.Pattern = "\[box2=(.*?),(.*?),(.*?),(left|right|center)\]"

    set rMatches = re.Execute(str)

    do until rMatches.Count = 0
        For Each rMatch In rMatches
            position = rMatch.SubMatches(3) ' Här finns center/left/right
            If LCase(position) = "center" Then
                str = re.Replace(str, "<div style=""margin:0 auto 5px auto;border:1px solid $3;width:$1;background-color:$2;padding:10px;"">")
            Else
                str = re.Replace(str, "<div style=""float:$4;margin:0 0 5px;border:1px solid $3;width:$1;background-color:$2;padding:10px;"">")
            End If
        Next
        set rMatches = re.Execute(str)
    Loop

    Box2 = str

    set rMatches = Nothing
    Set re = Nothing

End Function
AsaMedlem sedan dec. 20011 860 inlägg
#14

Tack så mycket!

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