[javascript] alweer een regex probleem

Pagina: 1
Acties:

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
Voor diegene die de eerdere post gelezen hadden, dat is opgelost, echter ik zit nu met een nieuw probleem.

De situatie: Ik wil de text uit een textarea in een ander frame weergeven. Omdat in die text opmaak code's gebruikt kunnen worden heb ik 1 functie geschreven die de text weergeeft en tegelijk die opmaak code's er uit filtert, zodat je alleen text te zien krijgt.

code:
1
2
3
4
5
6
    function show_tekst(tekst)
    {
        text = tekst.replace(/(<url>)(.*)(<\/url>)(.*)(<\/name>)/, "<u>$4</u>");
        text = text.replace(/\n/,"<br>");
        top.frames['voorbeeld'].document.getElementById('voorbeeldtekst').innerHTML = '<div class="kolom">'+text+'</div>';
    }


Omdat het om een voorbeeld gaat hoeft die url niet echt gemaakt te worden - het gaat er alleen om hoe de tekst er visueel uit komt te zien (dat omzetten gebeurd later in PHP, als de tekst bewaard wordt).

Zoals jullie zien zet ik een \n (nieuwe regel) om in een <br>. En daar doet zich iets heel merkwaardigs voor. Hij zet die \n wel om in een <br>, maar tot het punt waarop er een link is. Daarna kan ik zoveel enters geven als ik wil, hij zet er geen eentje meer om in een <br>

deze tekst:
ik ben hier wat aan het typen
en nu ga ik een link invoeren: <url>bla</url>linkname</name>
het stomme is alleen
dat nu de enters
niet meer omgezet worden
komt er zo uit te zien:
ik ben hier wat aan het typen
en nu ga ik een link invoeren: linkname het stomme is alleen dat nu de enters niet meer omgezet worden
Wie ziet wat ik fout doe?

Verwijderd

Die eerste ".*" matched "</url>linkname</name>" en de rest vind ie dus niet meer. In andere regexp implementaties zou eerst de "</name>" worden opgezocht, maar zo werkt js-regexp helaas niet...

Om dit op te lossen gebruik ik ipv de ".*" vaak "[^<]*".

  • disjfa
  • Registratie: April 2001
  • Laatst online: 12-05 15:11

disjfa

be

om nog maar ff een ding nog een keer te zeggen:
Verwijderd schreef op 12 september 2002 @ 15:57:
Ik zou die dots trouwens ook even ungreedy maken: .*?
vergeet dit niet, probeer maar een keer 2 links erin te zetten ;)

disjfa - disj·fa (meneer)
disjfa.nl


  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
Helaas, dat lost het probleem niet op.....

***edit***
sorry, cheatah, overheengelezen denk ik.
maar wat bedoel je met ungreedy?

  • disjfa
  • Registratie: April 2001
  • Laatst online: 12-05 15:11

disjfa

be

marty schreef op 13 september 2002 @ 11:24:
maar wat bedoel je met ungreedy?
als je m gebruikt met .* dan:
code:
1
<url>blabla</url>naam</name> nog wat geblaat <url>blabla2</url>naam2</name>

dan komt er als output <a href="blabla</url>naam</name> nog wat geblaat <url>blabla2">naam2</a>

en met .*? krijg je ze gewoon alletwee :)

disjfa - disj·fa (meneer)
disjfa.nl


  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
Ik heb het geprobeerd, maar als ik er dit van maak:

text = tekst.replace(/(<url>)(.*?)(<\/url>)(.*?)(<\/name>)/, "<u>$4</u>");

dan krijg ik de foutmelding: onverwachtse bepaler
en als ik er dit van maak:

text = tekst.replace(/(<url>)(.*)?(<\/url>)(.*)?(<\/name>)/, "<u>$4</u>");

blijf ik hetzelfde probleem houden

Overigens gedraagd ie zich niet zoals jij voorspelde. Als ik een tweede link invoer en ik bekijk het resultaat, dan laat ie de eerste link goed zien (zet ie om naar <u>linkname</u>) en de tweede link laat ie gewoon met de oorspronkelijke opmaakcode's staan. Maar het is dus niet zo dat ie het begin van de eerste omzet en het einde van de tweede

Verwijderd

Hee, "*.?" is ungreedy. Weer wat geleerd.

Maar, wat voor browser heb jij? Ik weet dat IE5.2 voor Mac deze format niet ondersteund (en dan krijg ik unknown quantifier)?? Maar op Mozilla1 en 1.1 (en IE6/Win) werkt het perfect!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

ungreedy is inderdaad niet overal ondersteund en in Javascript niet aan te raden om te gebruiken..

(tenzij je exact weet voor welke browsers je bezig bent en deze het allemaal wel ondersteunen.. intranet bijvoorbeeld)

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
hmm..ik gebruik IE 5.0 onder Windows ... degene die het gaat gebruiken waarschijnlijk een mac...

Is er dan een andere oplossing dit in javascript op te lossen?

Verwijderd

Het is niet exact hetzelfde, maar het werkt wel:
code:
1
2
3
var reTag=/<url>[^<]*<\/url>([^<]*)<\/name>/g;
var reNL=/\n/g;
text=tekst.replace(reTag,'<u>$1</u>').replace(reNL,'<br />');

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
thnx doekman, die werkt inderdaad
Pagina: 1