{ "nodes": [{ "uri": "https:\/\/log.exos.ninja\/3u", "content": "# wrap en JavaScript simple\r\n\r\nNecesitaba cortar un base64 en varias lineas de tama\u00f1o fijo, y busqu\u00e9 una funci\u00f3n de wrap en google, pero me encontr\u00e9 con funciones complicadas, muchas transformaban el string a un array y haci\u00e1n slices. Como [s\u00e9 de expresiones regulares](https:\/\/www.xkcd.com\/208\/) me dije a mi mismo, *tiene que haber una forma mas simple!*, as\u00ed que hice mi propia funci\u00f3n:\r\n\r\n const wrap = function (str, count, cut = \"\\n\") {\r\n var c = parseInt(count), r = new RegExp(`.{1,${c}}`, 'g');\r\n return str.match(r).join(cut);\r\n };\r\n\r\nEsta funci\u00f3n hace uso de algunas caracter\u00edsticas de [ES6](http:\/\/log.exodica.com.ar\/?q=es6), as\u00ed que pongo tambi\u00e9n la versi\u00f3n para ES5 (a.k.a browsers):\r\n\r\n var wrap = function (str, count, cut) {\r\n var c = parseInt(count).toString(10),\r\n r = new RegExp(\".{1,\" + count + \"}\", 'g');\r\n\r\n cut = cut || \"\\n\";\r\n\r\n return str.match(r).join(cut);\r\n };\r\n\r\nSe puede tambi\u00e9n extender el ```prototype``` del objeto ```String```con esta funci\u00f3n:\r\n\r\n String.prototype.wrap = function (count, cut) {\r\n var c = parseInt(count).toString(10),\r\n r = new RegExp(\".{1,\" + count + \"}\", 'g');\r\n\r\n cut = cut || \"\\n\";\r\n\r\n return this.match(r).join(cut);\r\n };\r\n\r\nDe esta forma lo podremos usar en cualquier parte del c\u00f3digo y de forma natural:\r\n\r\n (\"Hola mundo, esto es un string\").wrap(3);\r\n \/*\r\n Hol\r\n a m\r\n und\r\n o, \r\n est\r\n o e\r\n s u\r\n n s\r\n tri\r\n ng\r\n *\/\r\n\r\nHace un tiempo tambi\u00e9n hice [una similar para arrays](http:\/\/log.exodica.com.ar\/3k), espero que les sirva.\r\n\r\n## Como funciona\r\n\r\nAntes de irme voy a poner como funciona esto.\r\n\r\n var c = parseInt(count).toString(10),\r\n r = new RegExp(\".{1,\" + count + \"}\", 'g');\r\n\r\nc es simplemente ```count``` casteado a string, el ```parseInt``` es por si viene un valor en float o en string, luego lo que hago es crear una expresi\u00f3n regular que quedar\u00eda as\u00ed *(suponiendo que ```count``` sea 10):\r\n\r\n \/.{1,10}\/g\r\n\r\nPero que es esta expresi\u00f3n regular?, en expresiones regulares ```.``` significa *cualquier cosa*. sea un cadena que contenga caracteres alfanum\u00e9ricos, num\u00e9ricos, espacios, etc. Y ```{1,10}``` quiere decir que tiene que tener desde 1 caracter hasta 10 de largo, lo que har\u00e1 que se encuentren como resultados v\u00e1lidos todos los bloques de 10 caracteres, si se puede, o de por lo menos 1. El modificador ```g``` hace que la b\u00fasqueda sea global, por lo que devolver\u00e1 todos los resultados (en nuestro caso todos los bloques de caracteres de 10 caracteres m\u00e1ximo), al encontrar el primer resultado, el motor de expresiones regulares seguir\u00e1 con el siguiente.\r\n\r\nLuego ```str.match(r)``` correr\u00e1 la expresi\u00f3n regular sobre nuestro string, devolviendo un array de resultados, y el ```.join(cut)``` los volver\u00e1 a unificar usando el caracter de unificaci\u00f3n elegido, que por defecto ```\\n``` ser\u00eda un salto de linea.", "created": "2016-06-03 06:15:15"}] }