Avatar billede amews_aj Nybegynder
05. september 2011 - 13:33 Der er 10 kommentarer og
1 løsning

Match streng udenfor html tags

Jeg har brug for en regular expression der matcher en streng udenfor HTML tags.

Så her skal de understregede matches:
test<a href="..test..">test</a>test

Har fundet følgende RegExp:
[code]"(?<!<[^<>]*)test(?![^<>]*>)"[/code]

men kan ikke få den til at virke med java script:
new RegExp("(?<!<[^<>]*)"+smileysym[i]+"(?![^<>]*>)", 'g');

Det giver blot en syntax fejl.
Nogen der kan se problemet?
Avatar billede Qobra Nybegynder
03. november 2011 - 09:40 #1
Hvad med at replace alle html-tags væk til at starte med? Det er en mere overkommelig opgave. Kan gøres med java script:

"lorem\n<html>\nipsum\n</html>\ndolor".replace(/[\r\n]+/g," ").replace(/<[^>]+>/g, "\n").split(/\s*[\r\n]+\s*/)

Giver arrayet: ["lorem", "ipsum", "dolor"]

Altså: Først udbyttes newlines med mellemrum. Så fjernes alle tags (<...>) og så til sidst dannes et array med linjerne.
Avatar billede amews_aj Nybegynder
03. november 2011 - 10:45 #2
Tjoh, men jeg vil gerne beholde HTML tags i outputtet, blot erstatte nogle tekststrenge i alt udenfor HTML tags forinden.
Avatar billede Qobra Nybegynder
03. november 2011 - 11:10 #3
Man kan ikke lave lookbehind i javascript, men du kan lave lookahead, og det er vel også tilstrækkeligt?

> "a<aa>asdfasd<fasdfa>aasdfasdf</aa>a".replace(/a(?=[^>]*?(<|$))/g, 'B');
"B<aa>BsdfBsd<fasdfa>BBsdfBsdf</aa>B"

Så den ser altså ca. sådan her ud: new RegExp(smileysym[i]+"(?=[^>]*?(<|$))", 'g');

Husk at smileysym[i] skal escapes, fx ":-)" vil lave en slutparantes, og så vil det fejle.
Avatar billede amews_aj Nybegynder
03. november 2011 - 14:47 #4
Måske det vil virke.
Jeg prøver det af så snart jeg får tid til det :)
Indtil videre, tak for forslaget.
Avatar billede amews_aj Nybegynder
24. november 2011 - 20:01 #5
Fejler stadig...

I http://.../
bliver :/ opfattet som smiley.
Avatar billede Qobra Nybegynder
24. november 2011 - 20:16 #6
Men det er jo heller ikke inde i et tag?
Avatar billede amews_aj Nybegynder
24. november 2011 - 20:28 #7
Sorry, glemte at nævne at jeg forinden check for smileys kører en anden funktion der erstatter links (http://.../) med et a-tag.
Så det kommer ind i et tag.
Avatar billede Qobra Nybegynder
24. november 2011 - 23:21 #8
Kan du ikke skrive det stykke HTML, som der fejler? Hvis din funktion laver linket til <a href='http..'>http..</a>, så er http.. jo stadig udenfor et tag.
Avatar billede amews_aj Nybegynder
24. november 2011 - 23:33 #9
Ja, så har jeg nok skrevet det forkert desværre.
Både det i href, og inde i <a></a> tags skal undgå smileys.
Avatar billede Qobra Nybegynder
25. november 2011 - 17:25 #10
Okay, så er regular expressions nok ikke den bedste løsning.
Avatar billede amews_aj Nybegynder
11. februar 2012 - 13:17 #11
Tak for forsøget...
Lukker...
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

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