Avatar billede a1a1 Novice
30. juli 2002 - 16:46 Der er 24 kommentarer og
1 løsning

Marker ord v2 reg exp

nedenstående kode markerer en tekst med anden baggrundsfarve. Det virker fint, men...

Jeg ville egentlig gerne have den til ikke at markere <a href="www.testarea.dk"> men www.testarea.dk skal markeres?

jeg vil gerne have reg ex'en (?) til ikke at markere tekst der er i "situationstegn", hvis der ikke er spaces i (skal markere "der var en dag").
(så vil den ikke ødelægge linksne),

<html>
<head>
<title>markWord</title>
<script language="javascript">
function markWord(id, theword) {
    if ( document.getElementById ) {
        var elm = document.getElementById( id );
    } else
    if ( document.all ) {
        var elm = document.all[ id ];
    } else {
        return; // sorry, NS4 er ikke med.
    }
    elm.innerHTML = elm.innerHTML.replace( new RegExp( theword, "gi" ), "<span style='background: #ffff33'>"+theword+"</span>" );
}
</script>
</head>
<body onload="markWord('a','test');">
<span name="a" id="a">
<table><tr><td>
<table><tr><td>
Lorem est a ipsum test dolor sit amet, consectetuer adipiscing elit, sed diam amex nonummy nibh euismod
tincidunt ut laoreet dolore magna aliquam erat volutpat.
Ut wisi enim des ad minim <a href="http://www.testarea.dk" target="_blank">www.testarea.dk</a>, quis nostrud exerci tation ullamcorper suscipit nfo lobortis
nisl ut aliquip ex ea commodo consequat.
</td>
</tr></table>
</td><td>
Lorem est a ipsum dolor sit amet, consectetuer adipiscing elit, sed diam amex nonummy nibh euismod
tincidunt ut laoreet dolore magna aliquam www.testarea.dk erat volutpat.
Ut wisi enim des ad minim veniam, quis nostrud exerci tation ullamcorper suscipit nfo lobortis
nisl ut aliquip ex ea commodo consequat.</td>
</tr></table>
</span>
</body>
</html>
Avatar billede jakoba Nybegynder
30. juli 2002 - 17:06 #1
var ejIAnforsel = new RegExp( "[^\"\']" +ditord +"[^\"\']", "gi" );

finder forekomster af ditord der ikke er omkranset af anførselstegn.
Avatar billede a1a1 Novice
30. juli 2002 - 17:08 #2
;)

kan man få det til at gøre det "samme" med tekst der er indenfor < > (alle html tags ?

(den markere også <table> hvis ord er table :(
Avatar billede jakoba Nybegynder
30. juli 2002 - 17:11 #3
Næe, det duer vist ikke. i en replace vil et bogstav extra i hver ende blive sendt med.

kan vi regne med at det altid er en linktekst imellem '>' og '<'
var linkTekst = new RegExp( ">" +ditord +"<", "gi" );

elm.innerHTML = elm.innerHTML.replace( linkTekst, "><span style='background: #ffff33'>"+theword+"</span><" );
Avatar billede jakoba Nybegynder
30. juli 2002 - 17:16 #4
Nogen mennesker giver bare ikke op :)

jo det kan man da, men så er der legitime forekomster ad < og > i teksten eller indeni attributparametre.

For at gøre det 'ordentligt' skal hele teksten (som tidligere sagt) parses igennem og forstås på html-niveau.

mvh JakobA
Avatar billede a1a1 Novice
30. juli 2002 - 17:28 #5
jeg har prøvet begge måder men den første virker som det gjorde før, den anden kan jeg ikke få til du...:( (jeg har kaldt den rigtige funktion )


kan man ikke sige at den ikke må replace i mellem < og > ?
(så burde det virke med både links og med <table> og andre html tags....)


function markWord3(id, theword) {
    if ( document.getElementById ) {
        var elm = document.getElementById( id );
    } else
    if ( document.all ) {
        var elm = document.all[ id ];
    } else {
        return; // sorry, NS4 er ikke med.
    }
    var thetest = new RegExp( "[^\"\']" +theword +"[^\"\']", "gi" )
    elm.innerHTML = elm.innerHTML.replace( thetest, "<span style='background: #ffff33'>"+theword+"</span>" );

    //var thetest = new RegExp( ">" +theword +"<", "gi" );
    //elm.innerHTML = elm.innerHTML.replace( thetest, "><span style='background: #ffff33'>"+theword+"</span><" );
   
    //alert(elm.innerHTML);
}
Avatar billede a1a1 Novice
06. august 2002 - 14:07 #6
hmmm....
Avatar billede jakoba Nybegynder
06. august 2002 - 14:53 #7
<a href="dise.asp" onclick="if(document.formnavn.feltnavn.value>25)return false:">klikketekst</a>

du skal parse rimeligt intelligent for at undgå at større-end tegnet i onclick-handleren bliver set som afslutning på den <A kommando.
Avatar billede a1a1 Novice
06. august 2002 - 15:39 #8
ja men det er kun links (alt http://.... bliver "automatisk" til et link) (og evt. bold / italic), så det skulle ikke være et problem...

(ligesom hvis det var her på eksperten (som fx. i dette spørgsmål) )

jeg håber at du har en ide...

jeg putter lige nogle flere points på...:)
Avatar billede a1a1 Novice
06. august 2002 - 16:12 #9
og hvis der skulle være nogle der skriver > eller < kan man jo "replace" det med &lt; og &gt;

:)
Avatar billede limemedia Nybegynder
06. august 2002 - 17:34 #10
a1 >> jakoba gav mig et los over skinnebenet og bad mig tage lidt over - det prøver jeg så på...

Hvad med ;

<html>
<head>
<title>markWord</title>
<script language="javascript">
function markWord(id, theword) {
    if ( document.getElementById ) {
        var elm = document.getElementById( id );
    } else
    if ( document.all ) {
        var elm = document.all[ id ];
    } else {
        return; // sorry, NS4 er ikke med.
    }
   
    var out = "";
   
    // Lad os splitte på " tegn, alt mellem 2 "'ere må ikke parses   
    content = elm.innerHTML.split (/\"/);

    allow = true;
    // Loop igennem vores indhold
    for ( i = 0; i < content.length; i++) { 
        // Hvis vi er udenfor " må vi parse
        if (allow == true) out += content[i].replace(new RegExp( theword, "gi"), "<span style='background: #ffff33'>"+theword+"</span>");
        else out += '"'+content[i]+'"';
       
        // Hov, hvis vi måtte parse må vi ikke i næste omgang...
        allow = !allow;
    }
   
    elm.innerHTML = out;
}



</script>
</head>
<body onload="markWord('a','test');">
<span name="a" id="a">
<table><tr><td>
<table><tr><td>
Lorem est a ipsum test dolor sit amet, consectetuer adipiscing elit, sed diam amex nonummy nibh euismod
tincidunt ut laoreet dolore magna aliquam erat volutpat.
Ut wisi enim des ad minim <a href="http://www.testarea.dk" target="_blank">www.testarea.dk</a>, quis nostrud exerci tation ullamcorper suscipit nfo lobortis
nisl ut aliquip ex ea commodo consequat.
</td>
</tr></table>
</td><td>
Lorem est a ipsum dolor sit amet, consectetuer adipiscing elit, sed diam amex nonummy nibh euismod
tincidunt ut laoreet dolore magna aliquam www.testarea.dk erat volutpat.
Ut wisi enim des ad minim veniam, quis nostrud exerci tation ullamcorper suscipit nfo lobortis
nisl ut aliquip ex ea commodo consequat.</td>
</tr></table>
</span>
</body>
</html> 


Jeg splitter på " tegnet... Alt hvad der står mellem " xxx " vil ikke blive parset, alt andet vil

/ LJ
www.ljweb.com
Avatar billede limemedia Nybegynder
06. august 2002 - 17:44 #11
Hov, overså den med hvis " men også [mellemrum] - det er fikset med følgende "patch"


// Hvis vi er udenfor " må vi parse
if (allow == true) out += content[i].replace(new RegExp( theword, "gi"), "<span style='background: #ffff33'>"+theword+"</span>");
// Hvis der er mellemrum i koden, må vi også
else if (content[i].indexOf(" ") > 0) out += '"'+content[i].replace(new RegExp( theword, "gi"), "<span style='background: #ffff33'>"+theword+"</span>")+'"';
// Ellers må vi ikke
else out += '"'+content[i]+'"';
Avatar billede a1a1 Novice
07. august 2002 - 10:04 #12
:)

det virker næsten...

er det muligt at lave det så den parser i mellem < og >
(der vil ikke være < > tegn i teksten.)

(problemet er at hvis ordet fx. er table så bliver <table> markeret (og virker ikke :) )
Avatar billede limemedia Nybegynder
07. august 2002 - 10:19 #13
kom nu :)) du bruger da aldrig tables i html alligevel *gg*

kigger på sagen (hvis det her virker, skylder du mig og jakoba en omgang kolde :D)
Avatar billede limemedia Nybegynder
07. august 2002 - 11:29 #14
nok et forsøg - det er et hack, I know :)) men når vi er begrænset til JS er det lidt svært

---

<html>
<head>
<title>markWord</title>
<script language="javascript">
function markWord(id, theword) {
    if ( document.getElementById ) {
        var elm = document.getElementById( id );
    } else if ( document.all ) {
        var elm = document.all[ id ];
    } else {
        return; // sorry, NS4 er ikke med.
    }

    var out = "";

    // Lad os splitte på " tegn, alt mellem 2 "'ere må ikke parses 
    var content = elm.innerHTML.split (/\"/);

    allow = true;
    // Loop igennem vores indhold
    for ( i = 0; i < content.length; i++) {
        // Hvis vi er udenfor " må vi parse
        content[i] = content[i].replace(new RegExp("<"+theword+">", "gi"),"¤¤¤HIDEME¤¤¤");
        content[i] = content[i].replace(new RegExp("</"+theword+">", "gi"),"¤¤¤/HIDEME¤¤¤");

        if (allow == true) {
            // Add hack
            out += content[i].replace(new RegExp(theword, "gi"), "<span style='background: #ffff33'>"+theword+"</span>");
        }
        // Hvis der er mellemrum i koden, må vi også
        else if (content[i].indexOf(" ") > 0) out += '"'+content[i].replace(new RegExp( theword, "gi"), "<span style='background: #ffff33'>"+theword+"</span>")+'"';
        // Ellers må vi ikke
        else out += '"'+content[i]+'"';     

        // Hov, hvis vi måtte parse må vi ikke i næste omgang...
        allow = !allow;
    }
   
    out = out.replace(new RegExp("¤¤¤HIDEME¤¤¤", "gi"),'<'+theword+'>');
    out = out.replace(new RegExp("¤¤¤/HIDEME¤¤¤", "gi"),'</'+theword+'>');
    elm.innerHTML = out;
}



</script>
</head>
<body onload="markWord('a','test');">
<span name="a" id="a">
<table><tr><td>
<table><tr><td>
Lorem est a ipsum test dolor sit amet, consectetuer adipiscing elit, sed diam amex nonummy nibh euismod
tincidunt ut laoreet dolore magna aliquam erat volutpat.
Ut wisi enim des ad minim <a href="http://www.testarea.dk" target="_blank">www.testarea.dk</a>, quis nostrud exerci tation ullamcorper suscipit nfo lobortis
nisl ut aliquip ex ea commodo consequat.
</td>
</tr></table>
</td><td>
Lorem est a ipsum dolor sit amet, consectetuer adipiscing elit, sed diam amex nonummy nibh euismod
tincidunt ut laoreet dolore magna aliquam www.testarea.dk erat volutpat.
Ut wisi enim des ad minim veniam, quis nostrud exerci tation ullamcorper suscipit nfo lobortis
nisl ut aliquip ex ea commodo consequat.</td>
</tr></table>
</span>
</body>
</html>
Avatar billede a1a1 Novice
07. august 2002 - 11:39 #15
jubiiiii :)

hack or no hack, så virker det perfekt...

tusind tak (for dit java hack)
Avatar billede a1a1 Novice
07. august 2002 - 11:40 #16
og øl vil jeg da også gerne give :)
(går udfra at det ikke er kold kola du vil ha :o) )
Avatar billede a1a1 Novice
07. august 2002 - 12:17 #17
hmmm, der er dog en underlig "bug", hvis man søger på et bogstav "fucker det op".

jeg har lagt det op her

http://www.testarea.dk/linx.aspx?seekword=web
(søgeord = web)

http://www.testarea.dk/linx.aspx?seekword=a
(søgeord = a)

har du en ide om hvorfor?
Avatar billede limemedia Nybegynder
07. august 2002 - 15:45 #18
påén igen - kigger
Avatar billede a1a1 Novice
07. august 2002 - 15:51 #19
:)
Avatar billede limemedia Nybegynder
07. august 2002 - 21:20 #20
jeg når det ikke inden imorgen - det skal revideres meget :( dropper evt noget af regexpen, nu må vi se... den er lidt tricky men også det der gør det sjovt
Avatar billede a1a1 Novice
08. august 2002 - 14:44 #21
:) tak

måske man kunne lade være med at parse mellem < og > i stedet da alle html tags jo er i sådan nogle (jeg kan så replace alle < > med &gt; &lt; (serverside) ?

(men jeg vil have markeringen til af være klientside (så går det jo ud over brugerens komputer i stedet :) ) )

hvis du får løst det vil jeg da også godt give dig nogle flere af mine surt optjente points :o)
Avatar billede a1a1 Novice
09. august 2002 - 16:40 #22
ups databasen har vist været gået kold?

kommentaren fra i dag (fredag) kl. ca. 12.40 er der ikke?
Avatar billede limemedia Nybegynder
09. august 2002 - 18:25 #23
*tsk* *tsk* og én gang til for moster olga

---

<html>
<head>
<title>markWord</title>
<script language="JavaScript" type="text/javascript">
<!--
    function doMark(str, word) {
        return str.replace(new RegExp(word, "gi"), "<span style='background: #ffff33'>"+word+"</span>")
    }

    function markWord(id, needle) {
        if ( document.getElementById ) {
            var elm = document.getElementById(id);
        } else if (document.all) {
            var elm = document.all[id];
        } else {
            return; // sorry, NS4 er ikke med.
        }

        // Initialiser variabler
        var out = "";
        var haystack = elm.innerHTML;

        if (haystack.indexOf('<') == -1 || haystack.indexOf('>') == -1) {
            // Hvis ikke vi finder et < eller et > i haystack, er der ingen grund til at lede efter noget. Vi kan parse alt
            out = doMark(haystack, theword);
        } else {
            // Ellers må vi parse igennem for tags
            while (haystack.indexOf('<') != -1 && haystack.indexOf('>')) {
                // Alt indtil < skal parses
                out += doMark(haystack.substring(0, haystack.indexOf('<')), needle);
                // Alt fra < til > skal ignoreres
                out += haystack.substring(haystack.indexOf('<'), haystack.indexOf('>')+1)
                // Fjern det parsede stykke fra "høstakken"
                haystack = haystack.substring(haystack.indexOf('>')+1,haystack.length);
            }
            // Husk den sidste lille rest efter sidste tag
            out += doMark(haystack, needle);
        }

        // Skriv resultatet til browseren
        elm.innerHTML = out;
    }
//-->
</script>
</head>

<body onload="markWord('a','a');">
<span name="a" id="a">
abc<table><tr><td>
<table><tr><td>
Lorem est a ipsum test dolor sit amet, consectetuer adipiscing elit, sed diam amex nonummy nibh euismod
tincidunt ut laoreet dolore magna aliquam erat volutpat.
Ut wisi enim des ad minim <a href="http://www.testarea.dk" target="_blank">www.testarea.dk</a>, quis nostrud exerci tation ullamcorper suscipit nfo lobortis
nisl ut aliquip ex ea commodo consequat.
</td>
</tr></table>
</td><td>
Lorem est a ipsum dolor sit amet, consectetuer adipiscing elit, sed diam amex nonummy nibh euismod
tincidunt ut laoreet dolore magna aliquam www.testarea.dk erat volutpat.
Ut wisi enim des ad minim veniam, quis nostrud exerci tation ullamcorper suscipit nfo lobortis
nisl ut aliquip ex ea commodo consequat.</td>
</tr></table>jj
</span>
</body>
</html>
Avatar billede a1a1 Novice
09. august 2002 - 18:38 #24
;) saubergreat

nål og høstak :o)

det virker også som om det er hurtigere end før. :)
(man kunne se hele siden og så kom markeringen, men det kan også være at det bare er mig (har dog også lige puttet .net sp2 på serveren))

100 Points og Øl er det fino?
http://www.eksperten.dk/spm/244551
Avatar billede limemedia Nybegynder
09. august 2002 - 18:51 #25
var det ikke meget gode ord for det :))

jeg er nok først i DK igen i dec/jan - så øllene har lange udsigter (med mindre jobsituationen ændrer sig) - og de 100 point er jo overdådigt *gg*

/ LJ
www.ljweb.com
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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