28. maj 2004 - 15:12Der er
19 kommentarer og 1 løsning
Replace tekst imellem HTML tags
Hejsa.
Jeg har en streng: "<html><img src="" alt="xxx" /><p>xxx</p><div>xxx</div></html>"
Hvori jeg gerne vil erstatte "xxx" med "<span>xxx</span>", men vel at mærke kun de steder hvor "xxx" optræder imellem HTML-tags. Dvs. at den skal ikke erstatte "xxx" i billed-tag'en.
Jeg skriver det i ASP, men må indrømme at jeg ikke har brugt regular expressions i ASP før. Kan du hjælpe mig med hvordan det skal implementeres? Jeg har prøvet følgende:
Function StripHTML(ByRef asHTML) Set regEx = New RegExp regEx.IgnoreCase = True regEx.Global = True regEx.Pattern = "/(>[^<]+)/g,'><span$1</span>'" StripHTML = regEx.Replace(asHTML, asHTML) Set regEx = Nothing End Function
-- og hvis du nu bare havde brugt Jscript i stedet, kunne du jo have brugt min udgave !o]
Active Server Pages har ikke det fjerneste med et programmeringssprog at gøre, men er en arkitektur, hvori server-side programmering kan afvikles i en række programmeringssprog, deriblandt VBscript og f.eks. Jscript (M$ javascript !-)
Hov, udtrykket tilføjer <span> ved alt tekst som optræder i teksten. Det skal kun være de steder hvor lige præcis strengen "xxx" optræder. Håber du gider prøve igen.
Næh, men et eller andet skal vi have til at skelne mellem at det står inde i et tag og udenfor, det kan vel også være, at der hverken foran eller bagved er et start- eller slut-tag ...
Det lyder som om, det så ikke er en regexp, men en langsom streng-behandling der skal til ...
Hvis det var javascript, ville det blive med en par .splits, men jeg ved ikke om VB har noget tilsvarende ...
txt = txt.split(">");//opdel strengen ved tag-slut, læg resultatet i et array for(i=0;txt.length>i;i++){ txt[i] = txt[i].split("<");//opdel strengen i to dele ved tag-start txt[i][0] = txt[i][0].replace(/xxx/g,"<span>xxx</span>");//udfør replace overfor den første del txt[i] = txt[i].join("<");//læg strengen sammen igen } txt = txt.join(">");//læg strengen sammen igen
txt = txt.split(">");//opdel strengen ved tag-slut, læg resultatet i et array for(i=0;txt.length>i;i++){ txt[i] = txt[i].split("<");//opdel strengen i to dele ved tag-start txt[i][0] = txt[i][0].replace(/xxx/g,"<span>xxx</span>");//udfør replace overfor den første del txt[i] = txt[i].join("<");//læg strengen sammen igen } txt = txt.join(">");//læg strengen sammen igen
Response.Write(txt); %>
Jeg prøver at oversætte det til VBScript senere, men det her virker i hvertfald. Jeg opretter et nyt spørgsmål, hvor du kan få de ekstra 60 point. Tak for hjælpen.
Synes godt om
Ny brugerNybegynder
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.