Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[js] string chunks maken incl. enters

Pagina: 1
Acties:

  • PdeBie
  • Registratie: Juni 2004
  • Laatst online: 16:59
Hoi allemaal,

ik wil de waarde van een textarea chunken in blokjes van maximaal 50 karakters en elke enter ook in een aparte chunk.

Bijvoorbeeld:
code:
1
2
3
4
Hallo, ik heet Patrick en op Tweakers ben ik bekend onder de nickname PdeBie (76 karakters)
wordt:
[Hallo, ik heet Patrick en op Tweakers ben ik beken] (50)
[d onder de nickname PdeBie] (26)


Dit had ik in eerste instantie opgelost door:
JavaScript:
1
var chunksOf50Chars = text.match(/.{1,50}/g);


In de teksten kunnen echter ook enters staan. Dus bijvoorbeeld:
code:
1
2
3
Hallo, ik heet Patrick 

en op Tweakers ben ik bekend onder de nickname PdeBie

Echter, in Javascript valt de enter niet onder de Regex waarde . (punt), omdat dit vroeger op regelniveau plaatsvond of iets dergelijks.

Dus toen dacht ik het volgende te doen:
JavaScript:
1
var chunksOf50Chars = text.match(/(.|\r|\n){1,50}/g);


Maar vooralsnog krijg ik maar 2 chunks in plaats van 3, omdat hij opvolgende enters bij elkaar optelt tot hij bij 50 is.

Iemand een idee hoe ik voor elke enter een extra chunk kan krijgen?

[ Voor 3% gewijzigd door PdeBie op 22-05-2014 17:11 ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Ik hoef voor een long-time Devschuur®-regular als jij toch niet Creepy's sig voor je te gaan quoten, wel? :P

Waarom niet gewoon even een for-lusje?

[ Voor 14% gewijzigd door RobIII op 22-05-2014 18:14 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • PdeBie
  • Registratie: Juni 2004
  • Laatst online: 16:59
gewoon 50 karakters tellen en dan array.push ofzo? En bij een enter ook een array.push?

Dat is inderdaad niet eens zo'n gek idee :P

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Als je het tóch per se met een regex wil doen: je denkfout is redelijk simpel. Ik denk dat je hem meteen spot als ik de regex fix:
/(\r|\n)|(.{1,50})/g

Overigens heb je dan wel potentieel twee entries per enter omdat die op Windows-systemen uit zowel een \r als een \n bestaan. ;) Valt wel een mouw aan te passen, maar zo'n loopje is makkelijker en performt waarschijnlijk net zo goed of beter. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • PdeBie
  • Registratie: Juni 2004
  • Laatst online: 16:59
Ja daar liep ik dus ook al tegenaan, want op een Windows machine is het \r\n, op een Mac is het geloof ik \n en op Linux is het ook weer anders. Fijn die standaarden :P

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Op een Mac is het \r, op Linux \n AFAIK. Iets als (\r\n)|\r|\n zou het wel eens kunnen afvangen maar RobIII's oplossing gaat leesbaarder zijn. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 06-09 17:51
pdebie schreef op donderdag 22 mei 2014 @ 18:32:
gewoon 50 karakters tellen en dan array.push ofzo? En bij een enter ook een array.push?

Dat is inderdaad niet eens zo'n gek idee :P
Geen gek idee, maar veel veel minder triviaal dan je op het eerste gezicht zou denken. Het sleutelwoord dat roet in het eten gooit is surrogate pairs.

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Hoe is dat met regular expressions beter? :o

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
R4gnax schreef op donderdag 22 mei 2014 @ 22:46:
[...]


Geen gek idee, maar veel veel minder triviaal dan je op het eerste gezicht zou denken. Het sleutelwoord dat roet in het eten gooit is surrogate pairs.
Crap, helemaal vergeten, maar had wel de intentie, te verwijzen naar http://mathiasbynens.be/notes/javascript-unicode (of, TL;DR, de video) maar idd, dat is wel iets waar je rekening mee moet houden. En overigens niet JS-specifiek :)

[ Voor 12% gewijzigd door RobIII op 23-05-2014 00:05 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 06-09 17:51
NMe schreef op donderdag 22 mei 2014 @ 22:50:
Hoe is dat met regular expressions beter? :o
Niet, inderdaad. :+

Tenzij je bijv. XRegExp gebruikt in 'astral mode'. ;)

[ Voor 4% gewijzigd door R4gnax op 23-05-2014 12:05 ]


  • creator1988
  • Registratie: Januari 2007
  • Laatst online: 17:36
JavaScript:
1
2
3
4
5
var chunks = text.split('\n').filter(function(c) {
  return c.trim() !== '';
}).map(function(c) {
  return c.substr(0, 50);
});


?

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Ten eerste return je daarmee alleen de eerste 50 karakters van elke regel en ten tweede heb je hetzelfde unicodeprobleem dat hierboven beschreven wordt. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1