Jag har en topplista som jag vill plocka ut orden i. Markera orden i.
3 - ukrainas natur
1 - ukrainas ambassad
1 - ukraina visa
1 - ukraina turism
1 - sveriges ambassad i ukraina
1 - fakta om kiev
1 - fakta kiev
1 - allakiev
Hur skriver jag med kod: Leta reda på alla ord mellan " - " och vbCRLF och gör dom i en speciell kod...
FUNCTION validateURL(strText)
Dim mDelimit
Dim re
mDelimit = Chr(0)
Set re = New RegExp
re.Global = True
re.IgnoreCase = true
' ## PATTERN...
re.Pattern = ("[ - ].vbCRLF")
strText = re.Replace(strText, checkThisWord(mDelimit) & " xx " )
validateURL = strText
END FUNCTION
Plockat från annat projekt.
Jag är lite dålig på det där med mönster/pattern. Antingen " - " eller "- " på ena sidan och vbCRLF på den andra sidan. Ordet/-en där emellan vill jag jobba med!
Det fungerar... det ser ut som tidigare, utan felmeddelande, så det är svårt att felsöka! Men det där att plocka ut ord fungerar inte.
Min kod är fel, det är därför jag skriver på forumet.
OK, vi säger så här i stället:
re.Pattern = Hjälp mig att plocka ut orden som står mellan 1. "Mellanslag + minustecken + mellanskal" och fram till och med 2. "vbCRLF, radbrytningen".
3 - ukrainas natur
1 - ukrainas ambassad
1 - ukraina visa
1 - ukraina turism
1 - sveriges ambassad i ukraina
1 - fakta om kiev
1 - fakta kiev
1 - allakiev
Jag har studerat Pattern, och annan kod, men det är svårt. Jag förstår inte hur man skriver för att göra ett sökkriteria.
saken är att du inte behöver ha () mellan \s\-\s då du inte behöver gruppera den texten. Den är ju egentligen inte viktig.
Och om du vill hämta ut texten mellan "-" och nyrad så använder du (beroende på hur många () du har $<nummer> i din Replace.
FUNCTION validateURL(strText)
Dim mDelimit
Dim re
mDelimit = Chr(0)
Set re = New RegExp
re.Global = True
re.IgnoreCase = true
' ## PATTERN...
re.Pattern = "\- ([^\n]+)\n"
strText = re.Replace(strText, checkThisWord($1$2) & " xx " )
validateURL = strText
END FUNCTION
Microsoft VBScript compilation error '800a0408'
Invalid character
/admin/weblog/index.asp, line 139
strText = re.Replace(strText, checkThisWord($1$2) & " xx " )
---------------------------------------------^
FUNCTION checkThisWord(word)
response.write "<b>" & word & "</b>"
[...]
END FUNCTION
Detta är grymt rörigt...
Jag fattar inte vad mDelimit gör och när jag skriver "$1", inlkusuive dubbelfjumparna i koden, så skrivs det ut dollar ett ($1) i klartext i den lilla koden ovan.
1. Varför har du ChecThisWord? är det någon kod du gör eller är det bara för att göra texten fet?
Function FormatList(strText)
Dim re
Set re = New RegExp
re.IgnoreCase = True
re.MultiLine = True
re.Global = True
re.Pattern = "(- )([^\n]+)\n|$"
FormatList = re.Replace(strText, "$1<strong>$2</strong><br />")
End Function
Jag ska studera koden noggrant. Koden på forumet är lite tramsig, kan hålla med om det.
Koden kommer från ett annat sammanhang, mer komplext. Det är inte bara att göra fet text! :-) Jag brukar ibland skriva saker med response.write för att kolla om saker fungerar. Var man är, så att säga. Eftersom det är en lista med många ord gjorde jag dom feta för att särskilja dom från de andra orden...
' (- )([^\n]+)\n|$
'
' Options: case insensitive; ^ and $ match at line breaks
'
' Match either the regular expression below (attempting the next alternative only if this one fails) «(- )([^\n]+)\n»
' Match the regular expression below and capture its match into backreference number 1 «(- )»
' Match the characters “- ” literally «- »
' Match the regular expression below and capture its match into backreference number 2 «([^\n]+)»
' Match any character that is not a “A line feed character” «[^\n]+»
' Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+»
' Match a line feed character «\n»
' Or match regular expression number 2 below (the entire match attempt fails if this one fails to match) «$»
' Assert position at the end of a line (at the end of the string or before a line break character) «$»
(Du har annan kod i detta sista exemplet, men det kanske gör det samma??)
Detta fungerar:
Function FormatList(strText)
strText = strText & vbCRLF
Dim re
Set re = New RegExp
re.IgnoreCase = True
re.MultiLine = True
re.Global = True
re.Pattern = "(- )([^\n]+)\n|$"
' FormatList = re.Replace(strText, "$1<strong>$2</strong><br />")
FormatList = re.Replace(strText, checkThisWord("$2"))
End Function
Function checkThisWord(word)
-- checkThisWord = "<b>" & word & "</B><BR>"
End Function
Alltså...! checkThisWord är egentligen en mer avancerad funktion som även används på andra platser i hemsidan. Därför kan jag inte skriva den koden i samma funktion som den andra. (Koden gör mer än att bara feta till texten. Den kollar det specifika ordet mot några andra specifika listor... I färdigt utförande ska den inte feta till texten, däremot göra en liten markering om ordet finns eller inte.)
Function checkThisWord(word)
IF RIGHT(word,3) = ".se" THEN word = replace(word, ".se", "")
word = replace(word, " ", "")
word = replace(word, ".", "")
checkThisWord = "<b>" & word & " LEN:" & LEN(word) & "</B><BR>"
end Function
Jag har nu ÄNTLIGEN lokaliserat en vanlig sak som inte fungerar. Jag har testat lite olika varianter och även fast rätt ord skrivs ut i fet stil är längden på word 2 (dvs. LEN(word) = 2) på alla raderna... Så ska det inte vara!
1. Vad är strText som du skickar in i din funktion... Exakt vad skickar du in... är omöjligt att gissa detta för mig.
2. På Funktioner du använder ger inte två rader kod om det är 10 rader du använder. Är omöjligt.
3. strText = strText & vbCRLF behöver du inte ha då jag har lagt till \n|$ i slutet av regExp.
red. Varför len blir två är att det är strängen "$2" som kommer in i funktionen... det är inte förrän efter RegExpet har körts som den ersätter $2 med vad som har varit i texten tidigare.