webForumDet fria alternativet

Formatera egna taggar med RegExp...

ASP

13 svar · 649 visningar · startad av Method

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

Har inte jobbat något med RegExp innan så jag känner mig lite skakig i benen. Jag håller på med en inmatningssida där man ska kunna formatera sin text som man kan göra på denna inmatningen. så man kan göra text fet, länkar mm.

Då har jag denna kod som grund:

Function ReplaceTags(strPattern, strReplace, strText)
  Dim objRX
  set objRX = New RegExp
  objRX.IgnoreCase = True
  objRX.Global = True
  objRX.Pattern = strPattern
  ReplaceTags = objRX.Replace(strText, strReplace)
End Function 

strText = ReplaceTags("\[b\](.*?)\[\/b\]", "<b>$1</b>", strText)

Men jag får inte till en osorterad punktlista med hjälp av taggarna
|list|
|*| detta anger att det ska vara en punkt framför texten
|/list|

Har prövat lite men jag vet inte hur jag ska ska skriva formateringskoden för att det ska bli en punktlista.

Sen har jag ett problem, då jag gör en radbrytning innan [/TAGGEN] så formateras inte den, hur kommer detta sig?

Jag är inte riktigt med på vad alla villkor i sökfunktionerna gör, typ denna (.*?) kan någon förklara lite kort hur det fungerar

Tack på förhand

Jonas

Medlem sedan jan. 20022 440 inlägg
#2

Ditt meddelande är ganska långt och det var många frågor i en. Varje ämne kan klassas som en fråga. Dela upp hela din förfrågan i några mindre små istället så är chansen större att du får hjälp.

Tyvärr är jag själv väldigt dålig på regexp så jag kan bara hjälpa dig till att få hjälp ;)

Medlem sedan apr. 2001357 inlägg
#3

Nu har jag kortat ner mitt inlägg till 3 frågor, ni finner detta i första inlägget. Tack på förhand

Mvh

Jonas

Medlem sedan maj 200010 687 inlägg
#4

"." är allt utom radbrytningar därför matchar din kod endast på en rad.
Du kan använda t.ex. [\s\S] för att matcha på vad som helst.
* säger att den ska matchar på ospecificerat antal tecken.
? säger att den ska matcha non-greedy. Alltså den matchar på så lite som möjligt.

Medlem sedan apr. 2001357 inlägg
#5

Men om man ska matcha fram tills sluttaggen kommer hur skriver man det
[TAG]en massa tecken imellan [/SLUTTAG]

Matchar på så lite som möjligt? vad menas med det?

Tack, känner min inte alls familjär med RegExp så en del frågor kan vara lite newbie

Mvh

Jonas

Medlem sedan maj 200010 687 inlägg
#6

Exempel:

\[b\]([\s\S]*?)\[\/b\]

När man matchar så vill man matcha på närmsta sluttaggen och inte sista. Då gör man en non-greedy matchning.

Medlem sedan apr. 2001357 inlägg
#7

Nu funkar det utmärkt tackar, men jag sitter och trilskas med en annan funktion

strText = ReplaceTags("\[list\]([\s\S]*?)\[\/list\]", "<ul>$1</ul>", strText)
strText = ReplaceTags("\[o\](.*?)", "<li>$1</li>", strText)

Själva list strukturen ska se ut så här:
{list}
{o}punkt 1
{o}punkt 2
{o}punkt 4
{o}punkt 4
{/list}

Det fungerar halvbra, det ser rätt ut, men koden blir fel den ser ut så här

<ul><li></li>punk1<br><li></li>punk2<br><li></li>punk3<br><li></li>punk4<br></ul>

vad gör jag för fel?

Tack på förhand

Mvh

Jonas

Medlem sedan apr. 2001357 inlägg
#8

Nu har jag lagt till ett \n bakom (.*?) och då blir det rätt. Men är min kod rätt skriven?

strText = ReplaceTags("\[list\]([\s\S]*?)\[\/list\]", "<ul>$1</ul>", strText)
strText = ReplaceTags("\[o\](.*?)\n", "<li>$1</li>", strText)

Tack på förhand

Medlem sedan jan. 20022 440 inlägg
#9

Jag lyckas inte hitta något fel i din sista post.

Medlem sedan juni 20019 519 inlägg
#10

Ser helt korrekt ut enligt mig...
Dock kan man göra din kod lite mer avanacerad..
nu kommer den skriva ut <li>hej</li> även om du inte har din
med i texten..

Medlem sedan apr. 2001357 inlägg
#11

Skulle man kunna få en liten guide på hur man kan skriva den så den blir så avancerad ;)

Sen har jag en fråga om man vill kunna formatera listan med följande villkor

|list=1, A, b, i I|
|o| 1
|o| 2
|o| 3
|/list|

Resultatet ska bli
i.
ii.
iii.

I.
II.
III.

A
B
C
D osv

Användaren ska bara behöva skriva a, A, 1, i, I i |list=| så ska den formateras efter det. Kan man kolla vad användaren har fyllt i med hjälp av en case sats eller vad blir bäst?

Tack på förhand

Mvh

Jonas

Medlem sedan juni 20019 519 inlägg
#12

Hur skriver man en sådan lista i html?

Medlem sedan apr. 2001357 inlägg
#13

man gör det i css med denna kod:

ol { list-style-type: lower-roman}

ol { list-style-type: upper-roman}

ol { list-style-type: lower-alpha}

ol { list-style-type: upper-alpha}

ol { list-style-type: decimal}

Nu hittade jag hur man gör med html och då blev det enklare =)
<ol type="i">
<ol type="I">
<ol type="a">
<ol type="A">
<ol type="1">

Men hur tycker du att man ska skriva den koden för att bara skriva ut [o] när man har det inom ?

Mvh

jonas

Medlem sedan juni 20019 519 inlägg
#14

jag tycker du inte egentligen behöver det... då det är inte "tvungen" att göra så i HTML..

men med den andra saken med olika typer:
lägg till:

strText = ReplaceTags("\[list=(i|I|a|A|1)\]([\s\S]*?)\[\/list\]", "<ol type=$1>$2</ul>", strText)
286 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
156 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)