Kanske ?
objRegExp.Pattern = "<body ((bgcolor=""?'?(.*?)'?""?)|(text=""?'?(.*?)'?""?)|(link=""?'?(.*?)'?""?)?|\s){0,3}>"
23 svar · 447 visningar · startad av voigtann1
Försöke göra ett regulart utryck som plockar ut <body> taggen i en sträng detta är så långt jag har kommit:
Function encode(mess)
Set objRegExp = New regexp
objRegExp.Global = true
objRegExp.IgnoreCase = true
objRegExp.MultiLine = True
objRegExp.Pattern = "<body (bgcolor=""?'?(.*?)'?""?)? ?(text=""?'?(.*?)'?""?)? ?(link=""?'?(.*?)'?""?)?>"
mess = objRegExp.Replace(mess,"$2|$4|$6")
encode = mess
end function
strr = "<body bgcolor='#ff0000' text=#ff000 link='#fff000' >" &Vbclrf &"asd"
response.Write encode(strr)
Problemet är att folk skriver ju inte direkt alltid i den ordningen "jag" gör... kan man göra så att folk ändå kan skriva text och sen bgcolor?
Kanske ?
objRegExp.Pattern = "<body ((bgcolor=""?'?(.*?)'?""?)|(text=""?'?(.*?)'?""?)|(link=""?'?(.*?)'?""?)?|\s){0,3}>"
kalas!
problem bara ... nu kommer tydligen ändå ' alt " med i allt... vilket inte är så kul..
kan man göra samma sak med vlink och bara ändra om {0,3} till 4?
fixade det
objRegExp.Pattern = "<body ((bgcolor=""?'?(.*?)""?'?) ?|(text=""?'?(.*?)""?'?) ?|(link=""?'?(.*?)'?""?)? ?|(class=""?'?(.*?)""?'?) ?|/s){0,4}>"
" ?" i slutet på varje gjorde det :D
voigtann1 skrev:
kalas!
problem bara ... nu kommer tydligen ändå ' alt " med i allt... vilket inte är så kul..
/r du skall inte ha med vlink m.m som text då?
voigtann1 skrev:
kan man göra samma sak med vlink och bara ändra om {0,3} till 4?
japp
det betyder minst 0 träffar och max 3 i detta fallet
< ska i slutet ändå vara <
Hur gör jag om jag inte vill att: " &Vbclrf &"asd" skall finnas med... utan att hela reg.exp ersätter orginalet... dvs i slutet vill jag bara ha:
||#ffff|fff| så man kan placera ut det som man vill... dvs om
<body ...>
<h2>hej</h2>
Då skall bara <body> taggen laddas... allt annat tas bort. och vice versa
Vill du altså få ut <body bg... m.m> eller bara färgen?
Kan du få en <body> som är updelad på 2 eller flera rader?
meningen med den är att folk skall kunna skriva <body> taggen och att den skall läggas in med värden i CSS för en DIV... men allt annat förutom <body> skall vara inne i <div>Inne</div>
varför börja den bråka nu när jag nästan är färdig?
Function encode(mess)
Set objRegExp = New regexp
objRegExp.Global = true
objRegExp.IgnoreCase = true
objRegExp.MultiLine = True
'mess = Server.HTMLEncode(mess)
'(bgcolor=""?'?(.*?)""?'?) ?|
'objRegExp.Pattern = "<body (bgcolor=""?'?(.*?)'?""?)? (text=""?'?(.*?)'?""?)? (link=""?'?(.*?)'?""?)? ?\>"
objRegExp.Pattern = "<body ((bgcolor=""?'?(.*?)""?'?) ?|(text=""?'?(.*?)""?'?) ?|(link=""?'?(.*?)'?""?) ?|(class=""?'?(.*?)""?'?) ?|(ID=""?'?(.*?)""?'?) ?|\n){0,4}>"
mess = objRegExp.Replace(mess,"$3|$5|$7|$9|$11|")
encode = mess
end function
strr = "<body link='link' bgcolor='bakgrund as' text='text' class='myClass' ID='testID'>asdasda"
response.Write encode(strr)
ID='testID' gör lite sök fel tycker jag... vad kan det beror på?
Innehåller strr endast <body>-kod? Då kanske du kan göra så här:
Function encode(mess)
dim objRegExp
set objRegExp = new RegExp
objRegExp.pattern = "<body"
if objRegExp.test(mess) then
objRegExp.pattern = " \w+='([^']+)'"
objRegExp.global = true
dim matches
set matches = objRegExp.execute(mess)
dim res
res = ""
if matches.count > 0 then
for each m in matches
if m.submatches.count > 0 then
res = res & m.submatches(0) & "|"
end if
next
end if
end if
encode = res
end function
nej strr kommer inte endast innehålla <body> taggen tyvärr.
Function encode(mess)
Dim objRegExp
Set objRegExp = New RegExp
objRegExp.Pattern = "<body[^>]*>"
objRegExp.IgnoreCase = True
Dim match
Set body = objRegExp.Execute(mess)
Dim res
res = ""
If body.Count > 0 Then
objRegExp.Pattern = "\w+='([^']+)'"
objRegExp.Global = True
Dim matches
Set matches = objRegExp.Execute(body(0))
For Each m In matches
If m.Submatches.Count > 0 Then
res = res & m.Submatches(0) & "|"
End If
Next
End If
encode = res
End Function
men din kod ger bara en massa färger. Medans Glitters kod gör så att man kan fortsätta med en array att man då vet att array(0) ska vara bakgrunden osv.
Function encode(mess)
Dim objRegExp
Set objRegExp = New RegExp
objRegExp.Pattern = "<body[^>]*>"
objRegExp.IgnoreCase = True
Dim match
Set body = objRegExp.Execute(mess)
Dim res
res = ""
If body.Count > 0 Then
objRegExp.Pattern = "\w+='[^']+'"
objRegExp.Global = True
Dim matches
Set matches = objRegExp.Execute(body(0))
For Each m In matches
res = res & m & "|"
Next
End If
encode = res
End Function
Om du vill ha ut <body>innehållet</body> också:
Function encode(mess)
Dim objRegExp
Set objRegExp = New RegExp
objRegExp.Pattern = "(<body[^>]*>)((?:(?:<(?!/body))|[^<]|\n)*)"
objRegExp.IgnoreCase = True
Dim body
Set body = objRegExp.Execute(mess)
Dim res
res = ""
If body.Count > 0 Then
objRegExp.Pattern = "\w+='[^']+'"
objRegExp.Global = True
Set matches = objRegExp.Execute(body(0).Submatches(0))
For Each m In matches
res = res & m & "|"
Next
encode = res & body(0).Submatches(1)
Exit Function
End If
encode = ""
End Function
Peter S skrev:
Function encode(mess) Dim objRegExp Set objRegExp = New RegExp objRegExp.Pattern = "<body[^>]*>" objRegExp.IgnoreCase = True Dim match Set body = objRegExp.Execute(mess) Dim res res = "" If body.Count > 0 Then objRegExp.Pattern = "\w+='[^']+'" objRegExp.Global = True Dim matches Set matches = objRegExp.Execute(body(0)) For Each m In matches res = res & m & "|" Next End If encode = res End Function
Nu kommer din kod ge:
<body bgcolor=#fff000 text=#ff0000>
#fff000|#ff0000
<body text=#ffff00 bgcolor=#ff0000>
#ffff00|#ff0000
dvs i arrayn blir inte något man kan "lita" på om man nu skulle ha:
<div style='background-color:<%array(0)%>;'>Hej</div>
Function encode(mess)
Dim objRegExp
Set objRegExp = New RegExp
objRegExp.Pattern = "(<body[^>]*>)((?:(?:<(?!/body))|[^<]|\n)*)"
objRegExp.IgnoreCase = true
Dim body
Set body = objRegExp.Execute(mess)
Dim res
res = ""
If body.Count > 0 Then
objRegExp.Pattern = "\w+=(?:'[^']+'|[^\s]+)"
objRegExp.Global = true
Set matches = objRegExp.Execute(body(0).Submatches(0))
For Each m In matches
res = res & m & "|"
Next
encode = res & body(0).Submatches(1)
Exit Function
End If
encode = ""
End Function
jag tror du missförstå mig. jag vill ju ändast få ut färgerna men jag vill att det skall vara i en specifik ordning såsom Glitter har ändå ordnat.
kom även ihåg att du kan skriva white och ord som är längre än 6 tecken. Jag tror jag har förstått felet nu jag kan inte komma över $9 dvs $11 räknas som $1 & 1
Hmm så nu vet jag inte riktigt hur man skall fortsätta, kanske begränsar sig ändå att man får fylla i en class och ID och bakgrund men inget annat. Förslag? Eller använda Peter S koder och göra det som array och en reg.exp igen innuti arrayn?