Avatar billede ducks Nybegynder
09. december 2003 - 19:26 Der er 16 kommentarer og
1 løsning

RegExp med <ul><li>noget</li></uo>

Hvordan kan jeg med RegExp sørge for at når en  bruger skriver:

    punkt1
    punkt2
    punkt3

Bliver det lavet om til:

<ul>
<li>punkt1</li>
<li>punkt2</li>
<li>punkt3</li>
</ul>

Altså så når man skriver
    vil de blive lavet om til <ul></ul> og hver gang man laver linieskift mellem de 2, vil linien starte med <li> og slutte med </li>
    Avatar billede eagleeye Praktikant
    09. december 2003 - 20:34 #1
    Dog ikke RegExp hele vejen men det bruges til at finde hvor
      og
    er, er det noget?:

    <%

    str = "
      " & vbCrLf & "punkt1" & vbCrLf & "punkt2" & vbCrLf & "punkt3" & vbCrLf & "
    "

    Set regEx = New RegExp
    regEx.Global = true
    regEx.IgnoreCase = true
    regEx.Pattern = "\[list\](.*\s*)*\[\/list\]"
    RegEx.Global = true
    Set Matches = RegEx.Execute(str)
    For Each Match in Matches
      strM = Match.Value
      strM = replace(strM,"
      "&vbCrLf,"<ul><li>")
        strM = replace(strM,vbCrLf&"
    ","</li></ul>")
      strM = replace(strM,vbCrLf,"</li><li>")
      str = Replace(str,Match.Value,strM)
    Next
    Set RegEx = Nothing
    Response.Write "<br><br>"
    Response.Write str
    %>
    Avatar billede ducks Nybegynder
    09. december 2003 - 21:02 #2
    Jeg kan ikke helt gennemskue den, jeg skal have sat den ind i det RegExp jeg har i forvejen, som er rimlig simpelt:

    Set regEx = New RegExp
    regEx.Global = true
    regEx.IgnoreCase = True
    regEx.Pattern = "(\[b\])(.+)(\[\/b\])"
    message = regEx.Replace(message, "<b>$2</b>")

    [osv..]

    Jeg har derfor prøvet at erstatte dine str, med message:

    regEx.Pattern = "\[list\](.*\s*)*\[\/list\]"
    RegEx.Global = true
    Set Matches = RegEx.Execute(message)
    For Each Match in Matches
    messageM = Match.Value
    messageM = replace(messageM,"
      "&vbCrLf,"<ul><li>")
      messageM = replace(messageM,vbCrLf&"
    ","</li></ul>")
    messageM = replace(messageM,vbCrLf,"</li><li>")
    message = Replace(message,Match.Value,messageM)
    Next

    Men når man skriver:


      test1
      test2
      test3
      test4
      test5

    Kommer det ud på samme måde igen.
    Avatar billede eagleeye Praktikant
    09. december 2003 - 21:11 #3
    og
      er med små bogstaver som du skriver her?

      Hvis man skriver list med stort vil det faktisk ikke helt virker så skal det være sådan her:

      Set regEx = New RegExp
      regEx.Pattern = "\[list\](.*\s*)*\[\/list\]"
      regEx.IgnoreCase = true
      regEx.Global = true
      Set Matches = RegEx.Execute(message)
      For Each Match in Matches
      messageM = Match.Value
      messageM = replace(messageM,"
        "&vbCrLf,"<ul><li>",1,-1,1)
        messageM = replace(messageM,vbCrLf&"
      ","</li></ul>",1,-1,1)
      messageM = replace(messageM,vbCrLf,"</li><li>")
      message = Replace(message,Match.Value,messageM)
      Next
    Avatar billede ducks Nybegynder
    09. december 2003 - 21:21 #4
    og
      er med små bogstaver som du skriver her? - Ja alt med småt

      Den gør stadig intet ved det, den siger også at messageM er en udefineret variabel, burde den ikke være defineret ved message og Match?

      Det er rigtigt sat sammen?

      Set regEx = New RegExp
      regEx.IgnoreCase = True
      regEx.Global = true
      regEx.Pattern = "\[list\](.*\s*)*\[\/list\]"
      Set Matches = RegEx.Execute(message)
      For Each Match in Matches
        messageM = Match.Value
        messageM = replace(messageM,"
        "&vbCrLf,"<ul><li>",1,-1,1)
          messageM = replace(messageM,vbCrLf&"
      ","</li></ul>",1,-1,1)
        messageM = replace(messageM,vbCrLf,"</li><li>")
        message = Replace(message,Match.Value,messageM)
      Next
      regEx.Pattern = "(\[b\])(.+)(\[\/b\])"')
      message = regEx.Replace(message, "<b>$2</b>")
      [...]
      Set regEx = Nothing
    Avatar billede eagleeye Praktikant
    09. december 2003 - 21:23 #5
    Har du en Option Explicit i toppen af koden så skal du huske at lave Dim'e dem.
    Avatar billede ducks Nybegynder
    09. december 2003 - 21:25 #6
    Ja. Lige nu er `Dim message, regEx, Match, Matches, messageM´
    Avatar billede eagleeye Praktikant
    09. december 2003 - 21:32 #7
    Der skulle ikke være noget galt i den kode du har vist og den virker fint for mig.. Det lyder lidt underlidt.
    Det virker faktisk ikke hvis der ikke er et return (vbCrLf) inden
    Avatar billede ducks Nybegynder
    09. december 2003 - 21:35 #8
    Sådan, det var fordi jeg havde glemt, at jeg har message = Replace(message, vbCrLf, "<br>") lidt længere oppe :\

    Smider du et svar?

    Er der reference på w3schools (eller hvor) til RegExp?
    Avatar billede ducks Nybegynder
    09. december 2003 - 22:02 #10
    Hvis jeg så fx skriver:

    blablablabla

      bla
      bla
      bla
      bla
      bla
      bla
    blablablabla

    Tager det ufattelig lang tid, hvis den ikke er timet out, for at opdatere det?
    Avatar billede eagleeye Praktikant
    09. december 2003 - 22:12 #11
    Det lyder mærkeligt for der er ikke noget loop som skulle få den til at hænge..

    Jeg ved ikke om det vil ændre noget men du kan evt prøvé at nedlægge regEx objectet imellem hvert pattern (hvis det driller), dog ville jeg så tror det går langsommere.

    Set regEx = New RegExp
    regEx.IgnoreCase = True
    regEx.Global = true
    regEx.Pattern = "\[list\](.*\s*)*\[\/list\]"
    Set Matches = RegEx.Execute(message)
    ..
    ..
    ..
    Set regEx = Nothing
    Set regEx = New RegExp
    regEx.IgnoreCase = True
    regEx.Global = true
    regEx.Pattern = "(\[b\])(.+)(\[\/b\])"')
    message = regEx.Replace(message, "<b>$2</b>")
    ..
    ..
    Avatar billede ducks Nybegynder
    09. december 2003 - 22:17 #12
    Nu fik jeg en fejl:

    Active Server Pages error 'ASP 0113'

    Script timed out

    addpost.asp

    The maximum amount of time for a script to execute was exceeded. You can change this limit by specifying a new value for the property Server.ScriptTimeout or by changing the value in the IIS administration tools.

    Så det må næsten være et loop der kører igen og igen.

    Den kommer ikke hvis man kun har nogle få i
      , kan det være en fejl, der gør at hvis der er for mange, vil den aldrig slutte?
      Avatar billede ducks Nybegynder
      09. december 2003 - 22:37 #13
      Hvis jeg lukker den lige efter den del med list, og starter en ny bagefter virker det vidst fint :)
      Avatar billede ducks Nybegynder
      09. december 2003 - 22:40 #14
      Eller den kan klare lidt flere, men vil stadig lave fejl :(
      Avatar billede ducks Nybegynder
      09. december 2003 - 22:42 #15
      Hmm det ser ud til at det er fordi det tager lang tid, kan man gøre noget ved det?
      Avatar billede eagleeye Praktikant
      10. december 2003 - 16:52 #16
      Det er underligt, jeg har prøvet med mange i listen (25) og det taget ikke 1 sekund at loade siden.
      Avatar billede ducks Nybegynder
      10. december 2003 - 17:59 #17
      Meget mystisk, i dag kører det fint jeg havde enda prøvet at genstarte den i går, testet på 4 forskellige maskiner (2 af dem rigtige webserver hvoraf den ene er hosted proffessionelt (betalt)) :|

      Så der er ihvertfald ikke noget galt med scriptet :)
      Avatar billede Ny bruger Nybegynder

      Din løsning...

      Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

      Loading billede Opret Preview
      Kategori
      Kurser inden for grundlæggende programmering

      Log ind eller opret profil

      Hov!

      For at kunne deltage på Computerworld Eksperten skal du være logget ind.

      Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

      Du kan også logge ind via nedenstående tjenester