replace()

Status
Niet open voor verdere reacties.

NielsDesmet

Gebruiker
Lid geworden
19 mei 2008
Berichten
301
De functie "replace()" vervangt automatisch het eerste stukje tekst, dat overeenkomt met dat in arg1, met het stukje tekst in arg2. Maar als de waarde van je arg1 2 keer voorkomt in de "grote string", hoe kun je er dan voor kiezen om de tweede vervangen?
 
Een FOR-lus gebruiken?
 
Tja, dat vervangt ze alletwee. Maar ik wil juist maar dat de 2de wordt vervangen, dus níet de 1ste.
 
Dan ligt het gewoon aan je text.

Stel dat je het woord "help" wilt vervangen dan kun je niet zeggen dat hij de ene "help" wel moet wijzigen maar de andere niet aangezien dat tegen de werking van de functie in gaat.
 
De laatste vervangen gaat wel vrij eenvoudig:
Code:
<script type="text/javascript">
 function ff(s) {
  alert(s.replace(/(.*)(peer)/,'$1sinaasappel'));
  };

 ff('Een peer is meer!');
 ff('Een peer is geen appel en een appel is geen peer!');
 ff('Een peer is geen appel en een appel is geen peer, meneer peer!');
</script>
(.*) pakt alle tekens t/m de laatste peer en met $1 haal je die weer terug.

Maar dan pakt ie dus wel de derde als die er is. :confused:


Vr.Gr. Egel.
 
Ik heb de oplossing al gevonden, maar om een of andere reden laat het forum me niet toe om op "vraag is opgelost" te klikken :confused:
 
De laatste vervangen gaat wel vrij eenvoudig:
Code:
<script type="text/javascript">
 function ff(s) {
  alert(s.replace(/(.*)(peer)/,'$1sinaasappel'));
  };

 ff('Een peer is meer!');
 ff('Een peer is geen appel en een appel is geen peer!');
 ff('Een peer is geen appel en een appel is geen peer, meneer peer!');
</script>
(.*) pakt alle tekens t/m de laatste peer en met $1 haal je die weer terug.

Maar dan pakt ie dus wel de derde als die er is. :confused:


Vr.Gr. Egel.


Met een regex kan je praktisch alles vervangen natuurlijk

replace( /(.*?peer.*?)peer/ , $1appel );

de vraagtekens achter de .* zorgen ervoor dat er zo min mogelijk gevangen wordt in plaats van zo veel mogelijk. Zonder vraagtekens wordt er bij deze regex ook alleen de laatste vervangen, maar dan weer nooit de eerste :P (dus niks als er maar één keer peer staat)

Maar het is all opgelost dus wat zit ik te zwetsen?
 
Met een regex kan je praktisch alles vervangen natuurlijk

replace( /(.*?peer.*?)peer/ , '$1appel' );

de vraagtekens achter de .* zorgen ervoor dat er zo min mogelijk gevangen wordt in plaats van zo veel mogelijk. Zonder vraagtekens wordt er bij deze regex ook alleen de laatste vervangen, maar dan weer nooit de eerste :P
Zo pakt ie elke keer de tweede peer en gaat het mis bij één keer peer.
Maar met met één vraagteken meer pakt ie ook die eerste peer weer. ;)
Code:
<script type="text/javascript">
 function ff(s) {
  alert(s.replace(/(.*?peer.*?)?peer/,'$1sinaasappel'));
  };
 ff('Een peer is meer!');
 ff('Een peer is geen appel en een appel is geen peer!');
 ff('Een peer is geen appel en een appel is geen peer, meneer peer!');
</script>
Dat pakt de tweede, tenzij er maar één is, dan pakt ie die. :)


Vr.Gr. Egel.
 
oh ja, dat kan ook :p

Een regex is waarschijnlijk efficiënter dan split en join dus wie weet helpt het toch nog :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan