[JavaScript] .replace werkt maar 1 keer+

Pagina: 1
Acties:
  • 46 views sinds 30-01-2008

  • mees
  • Registratie: December 2000
  • Laatst online: 29-05 12:32

mees

Duuuussss...

Topicstarter
Misschien iets heel simpels wat ik over het hoofd zie (ik zit alweer veel te lang te klooien), of iets wat je maar moet weten..
simpel voorbeeldje:
code:
1
2
bla='abcabc';
bla=bla.replace('ab','12');

Geeft als resultaat: 12cabc
Terwijl ik zou willen: 12c12c

Dus de replace werkt alleen op de eerste 'ab' die erin zit..
Tell me, doe ik (als zowat javascript-n00b) iets fout?


Ik heb gezocht, enige wat ik tegenkom, is dit:
Verder moet de reguliere expressie in dit geval ook global uitgevoerd worden, anders vervangt hij inderdaad alleen de 1e match.

En daar kan ik geen ei van bakken eigenlijk :D

[ Voor 36% gewijzigd door mees op 22-11-2003 20:24 ]

8 bitterballen = 1 byterbal


  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 07-04 13:41
code:
1
2
3
4
5
6
7
8
9
10
11
function strReplaceAll(str,strFind,strReplace)
{
    var returnStr = str;
    var start = returnStr.indexOf(strFind);
    while (start>=0)
    {
        returnStr = returnStr.substring(0,start) + strReplace + returnStr.substring(start+strFind.length,returnStr.length);
        start = returnStr.indexOf(strFind,start+strReplace.length);
    }
    return returnStr;
}


edit:

Veel heb ik niet te vertellen over dit script, want javascripten kan ik niet :) Google gebruiken wel ;) http://javascript.about.c...ipts/blstringsnippets.htm

[ Voor 23% gewijzigd door PrisonerOfPain op 22-11-2003 21:11 ]


  • gmork
  • Registratie: Februari 2001
  • Laatst online: 03-12-2025
Met die global zat je goed, da's een parameter van de regular expression.


bla='abcabc';
bla=bla.replace(/ab/g,'12');

zou moeten werken

Waarbij / / de notatie voor regular expressions is en g de parameter (parameter i is b.v. case insensitive)

  • mees
  • Registratie: December 2000
  • Laatst online: 29-05 12:32

mees

Duuuussss...

Topicstarter
Okay, dan werkt ie nu... dank u
weet ik dat ook weer :D

[ Voor 8% gewijzigd door mees op 23-11-2003 03:45 ]

8 bitterballen = 1 byterbal


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

inderdaad, met de g modifier :)
die / / heet trouwens een constructor, dit is equivalent:

JavaScript:
1
2
var re = new RegExp('ab', 'g');
var re = /ab/g;


meer over reguliere expressies in javascript vind je op DevEdge: http://devedge.netscape.c...rence/regexp.html#1193136

reguliere expressies zijn bijzonder krachtig, en vaak ook nog eens behoorlijk snel (de implementaties in o.a. IE en Mozilla zijn echt bloedjesnel) :)

reminds me dat ik daar nog eens een stukje voor de FAQ over moet schrijven :)

Intentionally left blank


Dit topic is gesloten.