Avatar billede mcardle Nybegynder
26. april 2014 - 20:19 Der er 1 løsning

Forskellige replacement ødelægger hinanden

Hej Eksperter...

Jeg har lavet to forskellige funktioner der erstatter hashtags og links. Mit problem er, at der kan være hashtags /anchor point i links også jo.

Hvordan kan jeg gøre så jeg kun tager hashtags der ikke er i et link? Det skal lige siges at jeg ikke kan teste på at et hashtag starter med mellem og så havelåge, da der desværre er mange der skriver flere hashtags i forlængelse af hinanden f.eks.: #bigbrotherdk#sucks. Så for det ikke bliver et hashtag, men to har jeg bygget mine to parsere således.:

// HASHTAG PARSER
        function preparePost(post){
       
            var pattern = new RegExp(/(#\b[^ \-,\.#]+)/igm);
            var matches = [];
           
            while(match = pattern.exec(post)){
                matches[matches.length] = match;
            }
       
            for(x in matches){
                var startPosition = matches[x].index;
               
                // DO MAGIC HERE
               
                post = post.replace(matches[x][0], '<a href="/t/'+matches[x][0].replace('#','')+'">'+matches[x][0]+'</a>');
            }
           
            return post;
        }
       
        // LINK PARSER
        function prepareLink(post){
       
            var pattern = new RegExp(/((http(s?):\/\/|www.)[æøåa-z0-9\-\.\/\?=&#]+)/igm);
            var matches = [];
           
            while(match = pattern.exec(post)){
                matches[matches.length] = match;
            }
           
            for(x in matches){
                var link = matches[x][0];
                if(matches[x][0].indexOf('https://') == -1 && matches[x][0].indexOf('http://') == -1){
                    link = 'http://' + link;
                }
                post = post.replace(matches[x][0], '<a href="' + link + '" target="_blank">' + matches[x][0] + '</a>');
            }
           
            return post;
        }

Der hvor jeg har skrevet // DO MAGIC HERE havde jeg tænkt man kunne lavet nogle tjeks. Jeg har position start, men kan ikke helt lurer om der er en smart måde at gøre det med regex eller jeg skal til at lave heksekunstner :0) Det skal måske siges jeg arbejder i JavaScript / jQuery...

//mcardle
Avatar billede mcardle Nybegynder
27. april 2014 - 11:02 #1
Lavede et fix, hvor jeg replacede alle links med en placeholder og så parsede alle hashtags, hvorefter jeg indsatte alle links igen i de respektive placeholders...
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