Avatar billede axkris Nybegynder
02. april 2005 - 17:30 Der er 37 kommentarer og
1 løsning

Slette headings?

Hej alle

Jeg har følgende script, som jeg skal have til at slette heading1-tagget (og alt hvad der står i det), men det virker ikke, da den intet sletter.

Function StripHeadings (ByRef asHTML)
    Set regEx = New RegExp
    regEx.IgnoreCase = True
    regEx.Global = True
    regEx.Pattern = "(<h1[^<]+<\/h1>)"
    StripHeadings = regEx.Replace(asHTML, "")   
    Set regEx = Nothing
End Function

Kan du hjælpe mig med at få det til at virke samt udbygge det til, at det sletter alle headings (og ikke kun heading1)? Altså H1, H2, H3 osv., hvordan gør jeg det på en smart måde / i samme funktion?
Avatar billede roenving Novice
02. april 2005 - 17:37 #1
-- du har da paranteser i overskud, når du ikke skal replace dele af det, men ikke at det burde betyde nogen forskel ...

-- men jeg ville bruge sådan en, hvis jeg skulle gøre det (men jeg bruger ikke vbscript, så der kan være nogle små-detaljer, som er anderledes !-)

"<h[1-7].+?<\/h[1-7]>"
Avatar billede erikjacobsen Ekspert
02. april 2005 - 17:38 #2
Umiddelbart skal du vel erstatte
  \/
med
  /
Avatar billede roenving Novice
02. april 2005 - 17:40 #3
Kan den lave problemer med regExps i vbscript, erik ?-)
Avatar billede roenving Novice
02. april 2005 - 17:41 #4
Argh, selvfølgelig skal den dobbeltescapes, hvis man escaper i en tekststreng:

"<h[1-7].+?<\\/h[1-7]>"

-- eller som erik skriver uden !-)
Avatar billede axkris Nybegynder
02. april 2005 - 18:32 #5
Begge virker ikke hos mig:

<%

strString= "<h1 class=text><span>Featured Artists</span></h1>"

response.write StripHeadings(strString)

Function StripHeadings (ByRef asHTML)
    Set regEx = New RegExp
    regEx.IgnoreCase = True
    regEx.Global = True
    regEx.Pattern = "<h[1-7].+?<\\/h[1-7]>"
    'regEx.Pattern = "(<h1[^<]+</h1>)"
    StripHeadings = regEx.Replace(asHTML, "")   
    Set regEx = Nothing
End Function

%>
Avatar billede axkris Nybegynder
02. april 2005 - 19:38 #6
Kan I hjælpe?
Avatar billede erikjacobsen Ekspert
02. april 2005 - 19:42 #7
Ja, det vi har foreslået er alt tilstrækkeligt. Dette virker helt uden problemer:

    asHTML="hjesam <h1>hedjkdadh</h1> ...."
    Set regEx = New RegExp
    regEx.IgnoreCase = True
    regEx.Global = True
    regEx.Pattern = "(<h1>.*?</h1>)"
    StripHeadings = regEx.Replace(asHTML, "") 
    Set regEx = Nothing
    response.write server.htmlencode(StripHeadings)
Avatar billede erikjacobsen Ekspert
02. april 2005 - 19:42 #8
og hvis du vil generalisere:

    regEx.Pattern = "(<h[1-7]>.*?</h[1-7]>)"
Avatar billede axkris Nybegynder
02. april 2005 - 19:44 #9
Jo, men det skal også kunne virke på:

<h1 class=text><span>Featured Artists</span></h1>

Og ikke blot på et tag uden parameter.
Avatar billede roenving Novice
02. april 2005 - 19:46 #10
Hrm, du kan jo bare fjerne starttag-slut-tegnet:

    regEx.Pattern = "(<h[1-7].*?</h[1-7]>)"
Avatar billede erikjacobsen Ekspert
02. april 2005 - 19:46 #11
Så gør du bare som foreslået:
  regEx.Pattern = "<h[1-7].*?</h[1-7]>"
Avatar billede axkris Nybegynder
02. april 2005 - 19:48 #12
Takker - nu virker det. Tryk svar :-)
Avatar billede erikjacobsen Ekspert
02. april 2005 - 19:53 #13
Ingen point til mig, tak.

Og / er ikke spor magisk i regulære udtryk, derfor skal der ikke \ foran. Det er kun
når det regulære udtryk i visse sprog er omgivet af /..../ at man skal gøre det.

Og
  <h1[^<]+</h1>
virker jo ikke når der er andre tags end lige <h1> og </h1> i linien, da [^<] stopper ved det først forekommende < - og så matcher det jo ikke.
Avatar billede roenving Novice
02. april 2005 - 19:59 #14
-- nej, nej, en skråstreg er bare en skråstreg, men jeg spurgte mere til, om en escaping af noget kunne skade nogen steder, for det gør det mig bekendt ikke i de sprog jeg har fat i det i !-)

-- hvad har du gjort anderledes fra de første udgaver, så det nu virker ?-)

-- og velbekomme '-)
Avatar billede roenving Novice
02. april 2005 - 20:02 #15
Tak for point ;~}
Avatar billede axkris Nybegynder
02. april 2005 - 20:04 #16
Selv tak - jeg ville også gerne have form-tagget væk, men jeg kan ikke finde ud af det med hverken    

regEx.Pattern = "(<form[^<]+<\/form>)"

eller

regEx.Pattern = "(<form.*?</form>)"
Avatar billede axkris Nybegynder
02. april 2005 - 20:26 #17
Nej, jeg må hellere oprette et nyt spg.: http://www.eksperten.dk/spm/605905
Avatar billede erikjacobsen Ekspert
02. april 2005 - 20:49 #18
Umiddelbart ville jeg da sige at
  regEx.Pattern = "<form.+?</form>"
ville virke. Har du et eksempel, der ikke virker??
Avatar billede erikjacobsen Ekspert
02. april 2005 - 20:50 #19
Okay, måske er det mellemrum. Jeg ved ikke nok om regexp i MS's verden, men et simpelt hack er

  regEx.Pattern = "<form(.|[\r\n])+?</form>"
Avatar billede erikjacobsen Ekspert
02. april 2005 - 20:51 #20
Ok, erstat lige "mellemrum" med "linieskift"
Avatar billede roenving Novice
02. april 2005 - 20:59 #21
regEx.MultiLine = True måske ?-)
Avatar billede erikjacobsen Ekspert
02. april 2005 - 21:22 #22
Ja, Rønving - det er da et forsøg værd. MS's udgaver er så verbal - det er nemmere i Perl.
Avatar billede axkris Nybegynder
02. april 2005 - 21:25 #23
Takker, jeg kan dog ikke lige pt. om det virker, da jeg er kommet til at pille ved min script-tag-funktion, så den sletter alt.

Hvad er fejlen?? Det ser da rigtigt ud! ;)

Function StripScript(ByRef asHTML)
    Set regEx = New RegExp
    regEx.IgnoreCase = True
    regEx.Global = True
    regEx.Pattern = "(<script[^\¨]*\<\/script>)"
    StripScript = regEx.Replace(asHTML, "")
    Set regEx = Nothing
End Function
Avatar billede roenving Novice
02. april 2005 - 21:30 #24
Brug den samme algoritme:

    regEx.Pattern = "(<script.+?</script>)"
Avatar billede axkris Nybegynder
02. april 2005 - 21:32 #25
Den sletter desværre intet.
Avatar billede erikjacobsen Ekspert
02. april 2005 - 21:34 #26
Sikkert linieskift igen. Har du prøvet 02/04-2005 20:50:59
Avatar billede axkris Nybegynder
02. april 2005 - 21:40 #27
Har prøvet - intet virker:

Function StripScript(ByRef asHTML)
    Set regEx = New RegExp
    regEx.IgnoreCase = True
    regEx.Global = True
    regEx.MultiLine = True
    'regEx.Pattern = "(<script[^\¨]*\<\/script>)"
    'regEx.Pattern = "(<script.*?<\/script>)"   
    'regEx.Pattern = "(<script.+?<\/script>)"
    'regEx.Pattern = "(<script.+?</script>)"
    'regEx.Pattern = "(<script[^<]+<\/script>)"
   
    StripScript = regEx.Replace(asHTML, "*")
    Set regEx = Nothing
End Function
Avatar billede axkris Nybegynder
02. april 2005 - 21:40 #28
Eller rettere, det slet kun nogle af script-taggene... ikke dem alle.
Avatar billede erikjacobsen Ekspert
02. april 2005 - 21:43 #29
Sikkert linieskift igen. Har du prøvet 02/04-2005 20:50:59
Avatar billede axkris Nybegynder
02. april 2005 - 21:45 #30
ja, se "regEx.MultiLine = True" ovenstående.
Avatar billede axkris Nybegynder
02. april 2005 - 21:47 #31
Nå, sorry, nej det har jeg ikke prøvet. Hvordan skal kode så se ud?
Avatar billede erikjacobsen Ekspert
02. april 2005 - 21:47 #32
Du kunne prøve med det der står 02/04-2005 20:50:59  ;)
Avatar billede axkris Nybegynder
02. april 2005 - 21:50 #33
Mht. form-tag-funktionen kan jeg ikke teste den, før jeg får rettet min pille fejl i script-tag-funktionen. Men jeg finder lige en backup....
Avatar billede erikjacobsen Ekspert
02. april 2005 - 21:51 #34
Ookaay, men det er vel nok at skifte "form" ud med "script"
Avatar billede axkris Nybegynder
02. april 2005 - 22:22 #35
Kørte restoren og fandt mit gamle script-tag-script frem, som jeg også kunne bruge form-tagget og nu kører det hele. Takker for hjælpen.

Function StripScript(ByRef asHTML)
    Set regEx = New RegExp
    regEx.IgnoreCase = True
    regEx.Global = True

    'SKOD-KODNING
    asHTML = replace(asHTML, "</script>", "¨")
    regEx.Pattern = "(<script[^\¨]*\¨)"
    StripScript = regEx.Replace(asHTML, "")
    Set regEx = Nothing
End Function

Function StripForm(ByRef asHTML)
    Set regEx = New RegExp
    regEx.IgnoreCase = True
    regEx.Global = True

    'SKOD-KODNING
    asHTML = replace(asHTML, "</form>", "¨")
    regEx.Pattern = "(<form[^\¨]*\¨)"
    StripForm = regEx.Replace(asHTML, "")
    Set regEx = Nothing
End Function

Jeg har prøvet at komme uden om min skod-kodning med replacen "replace(asHTML, "</form>", "¨")" men jeg kan ikke indbygge det direkte i sætningen - kan I?

Jeg har prøvet med:
  regEx.Pattern = "(<form[^</script>]*</script>)"
og
  regEx.Pattern = "(<form[^\</script>]*\</script>)"
og
  regEx.Pattern = "(<form[^\<\/script>]*\<\/script>)"

Men det virker ikke.
Avatar billede erikjacobsen Ekspert
02. april 2005 - 22:26 #36
Hvis du får lyst til at prøve det jeg skrev, så siger du bare til ;)
Avatar billede axkris Nybegynder
02. april 2005 - 22:29 #37
Jeg har prøvet det, men det virker ikke, men det gør det, som jeg lige har postet :-)

Så alt er fint ok, blot vil jeg gerne optimere koden, så min skodkodning forsvinder.
Avatar billede axkris Nybegynder
02. april 2005 - 22:31 #38
Med andre ord, det virker, dog er jeg kræsen og vil gerne indbygge "</script>" direkte i pattern, men selvom I ikke kan hjælp mig med det ;-) så gør den stadig det, som den skal.
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