Toon posts:

[js] regexp split in ie doet vreemd volgens mij

Pagina: 1
Acties:

Verwijderd

Topicstarter
Als ik dit doe in ie:
code:
1
2
var x='doe deze test eens'.split(/d/g);
document.write(x);

Krijg ik "oe ,eze test eens" terug.
In Mozilla krijg ik ",oe ,eze test eens" terug.

Als ik gewoon split met de string "d" krijg ik in ie en moz ",oe ,eze test eens" terug.
Dit is dus volgens mij duidelijk een bug in ie.

Op zich is dit wel makkelijk te omzeilen, maar nu vroeg ik me het volgende af:
Het is mogelijk om methodes toe te voegen aan het string object in ie en ik dacht dat het ook mogelijk was om bestaande methodes aan te passen (zoals split) in ie.

Weet iemand toevallig hoe dat moet, of hoe ik het aan moet pakken?

  • André
  • Registratie: Maart 2002
  • Laatst online: 26-05 00:33

André

Analytics dude

Gaat het nu alleen om die ene komma?

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

André schreef op 13 februari 2004 @ 15:44:
Gaat het nu alleen om die ene komma?
nee, split geeft een array terug. Het is hier duidelijk dat de behaviour van split in IE inconsequent is aangezien het gebruik van een reguliere expressie een ander resultaat oplevert dan het gebruik van een vaste split-string:

JavaScript:
1
2
var a = 'doe deze test eens'.split(/d/); // ['oe ', 'eze test eens']
var b = 'doe deze test eens'.split('d'); // ['', 'oe ', 'eze test eens']

verbaast me niets trouwens; IE heeft wel meer bugs met betrekking tot de implementatie van reguliere expressions...


wb de vraag; ja, je kan standaard methods overschrijven dmv prototyping:

JavaScript:
1
2
3
4
5
6
function mysplit(args) {

  // some code

}
String.prototype.split = mysplit;

bedenk echter dat je dan binnen mysplit niet meer van de eigenlijke split-methode gebruik kan maken, aangezien je die overschreven hebt...

[ Voor 9% gewijzigd door crisp op 13-02-2004 15:52 ]

Intentionally left blank


Verwijderd

Topicstarter
Ja, dat bedoel ik, maar ik dacht dat je in javascript op een of andere manier een kopie van de oude methode kon bewaren om hem later weer te gebruiken voor de standaard methode die je aan het overschrijven bent.

Ik zou alleen niet weten hoe...

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Verwijderd schreef op 13 februari 2004 @ 15:57:
Ja, dat bedoel ik, maar ik dacht dat je in javascript op een of andere manier een kopie van de oude methode kon bewaren om hem later weer te gebruiken voor de standaard methode die je aan het overschrijven bent.

Ik zou alleen niet weten hoe...
zoiets:

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
function mysplit(r) {

  if (typeof r != 'string') r = r.toString().match(/\/(.*?)\//)[1];
  return this.orgsplit(r);

}
String.prototype.orgsplit = String.prototype.split;
String.prototype.split = mysplit;

var x='doe deze test eens'.split(/d/);
alert(x);


(mysplit kan natuurlijk veel netter, dit is erg quick en dirty)

Intentionally left blank


Verwijderd

Topicstarter
Ja dat werkt goed, bedankt!

Die mysplit werkt wel goed in dit geval inderdaad, maar voor moeilijke gevallen werkt het geloof ik niet.

Ik heb zoiets van mysplit gemaakt:
code:
1
2
3
4
5
function mysplit(r) {
  var temp1 = this.orgsplit(r);
  if ((this.search(r)==0)&&(temp1.length>0)){if (temp1[0].length>0){temp1.unshift('')};};
  return temp1;
}

Misschien kan het wel simpeler, maar volgens mij werkt het wel goed in alle gevallen.

Dit was trouwens in het kader van het eruit slopen van zoveel mogelijk ie-specifieke code en in een aparte file stoppen.
Pagina: 1