[JS] trim-functie

Pagina: 1
Acties:

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47
Probeer een trim-fnuctie te bouwen en snap niet waarom zoiets simpels als dit niet werkt..
code:
1
2
3
4
function trim(str){
    var re = /^\s*(.*)\s*$/;
    return str.replace(re, "$1");
}

Hij moet toch gewoon de string met wat ie vindt tussen de begin en eindspaties vervangen en returnen??

Wat ik nu krijg is de string alleen van links getrimd.. dus ontdaan van spaties van links, maar de rechter neem ie ook mee.. Is eigenlijk wel logisch eigenlijk, want de spaties behoren tot de (.*) verzameling.. maar hoe doe ik het beter?

Eigenlijk moet ie van achter naar voren zoeken, maar ben geen Regexpert en ken hier ook niks over vinden...

BVD

  • 2
  • Registratie: November 2000
  • Laatst online: 31-03 13:52

2

misschien ipv (.*) doen (.+?) of nog beter ([^\s]+)

/edit

heb even gecheckt, werkt inderdaad beter. Is het veel voorkomende probleem dat hij te greedy is.

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

(.+?) werkt :P

Maar wat doet het? .+ is 1 of meer non-space chars.. maar die ? daarna dan?

Mocht iemand hem willen gebruiken.. mn trim fnuctie komt nu heirop neer:
code:
1
2
3
function trim(str){
    return str.replace(/^\s*(.+?)\s*$/,"$1");
}

  • 2
  • Registratie: November 2000
  • Laatst online: 31-03 13:52

2

.+ is 1 of meer; Je heb een string die sowieso niet uit alleen spaties bestaat neem ik aan.

? maakt hem ungreedy zoals dat heet. Moet je maar even rondzoeken in /14, kun je er vast veel over vinden.

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47
ik ben weer een hoop wijzer!

  • 2
  • Registratie: November 2000
  • Laatst online: 31-03 13:52

2

Overigens is het gebruik van [^\s]+ nog net iets beter; dat matcht namelijk alle tekens die geen whitespace zijn. Misschien hier niet maar in andere gevallen kan het net iets waterdichter zijn.

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47
ah.. want hij werkt in dit voorbeeld niet namelijk..

moet het trouwens dan geen \S zijn ipv \s ?

Trouwens.. whitespaces moeten wel gewoon gematched worden als string natuurlijk.. Ik moet ook een langere tekst knunen trimmen..

" Dit is een zin. " bv

  • 2
  • Registratie: November 2000
  • Laatst online: 31-03 13:52

2

Damn, daar zeg je wat :)

Dan moet je idd die eerste gebruiken.

Waarom zou het dan \S moeten zijn ipv \s dan?

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47
omdat \S non-whitespace is
en \s juist WEL whitespaces ?

EDIT: laat maar [^] is juist verzameling waarmee NIET moet worden begonnen :P Dus meot je juist wel whitespaces derin hebben..

\s klopt dus..

Ben niet echt een Regexpert.. maar vin het wel een super goeie manier om dingen te doen.. zeker in JS waar bestandsgrootte erg belangrijk is.

Ter vergelijking.. dit is MS's non-regex versie:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 function trim_string() {
     var ichar, icount;
     var strValue = this;
     ichar = strValue.length - 1;
     icount = -1;
     while (strValue.charAt(ichar)==' ' && ichar > icount)
       --ichar;
     if (ichar!=(strValue.length-1))
       strValue = strValue.slice(0,ichar+1);
     ichar = 0;
     icount = strValue.length - 1;
     while (strValue.charAt(ichar)==' ' && ichar < icount)
       ++ichar;
     if (ichar!=0)
       strValue = strValue.slice(ichar,strValue.length);
     return strValue;
 }

:P

  • 2
  • Registratie: November 2000
  • Laatst online: 31-03 13:52

2

Let alleen wel op: die ^ in [^\s] heeft niets te maken met het begin van een string, zoals het bijvoorbeeld wel buiten [] doet (zoals $ het einde aangeeft dus). Het geeft alleen een aantal karakters aan dat niet matcht.
Pagina: 1