Como dice el título, tengo una cadena y quiero dividirla en segmentos de n caracteres.
Por ejemplo:
var str = 'abcdefghijkl';
después de un poco de magia n=3
, se convertirá
var arr = ['abc','def','ghi','jkl'];
¿Hay alguna forma de hacer esto?
[\s\S]
lugar de.
no fallar en las nuevas líneas.''.match(/.{1,3}/g)
y''.match(/.{3}/g)
regresar ennull
lugar de una matriz vacía.Si no quieres usar una expresión regular ...
jsFiddle .
... de lo contrario, la solución regex es bastante buena :)
fuente
3
variable es la sugerida por el OP. Es más legible que concatenar una cadena regexp.fuente
3
mí pero vuelvenull
con250
. 🤔Partiendo de las respuestas anteriores a esta pregunta; la siguiente función dividirá una cadena (
str
) n-número (size
) de caracteres.Manifestación
fuente
Mi solución (sintaxis ES6):
Incluso podríamos crear una función con esto:
Luego puede llamar a la función fácilmente de manera reutilizable:
Salud
fuente
Solución limpia sin REGEX
fuente
La función anterior es lo que uso para la fragmentación de Base64. Creará un salto de línea cada 75 caracteres.
fuente
replace(/.{1,75}/g, '$&\n')
.Aquí entremezclamos una cadena con otra cadena cada n caracteres:
si usamos lo anterior así:
obtenemos:
y aquí hacemos lo mismo, pero empujamos a una matriz:
y luego ejecutarlo:
obtenemos:
si alguien conoce una manera de simplificar el código anterior, lmk, pero debería funcionar bien para las cadenas.
fuente
Alguna solución limpia sin usar expresiones regulares:
Ejemplo de uso: https://jsfiddle.net/maciejsikora/b6xppj4q/ .
También intenté comparar mi solución para regexp una que fue elegida como respuesta correcta. Algunas pruebas se pueden encontrar en jsfiddle - https://jsfiddle.net/maciejsikora/2envahrk/ . Las pruebas muestran que ambos métodos tienen un rendimiento similar, tal vez a primera vista la solución regexp es un poco más rápida, pero juzgue usted mismo.
fuente
Con
.split
:y
.replace
será:/(?!$)/
es detenerse antes de finalizar/$/
, sin es:ignorar el grupo
/(?:
...)/
no es necesario,.replace
pero en.split
agregar grupos al arr:fuente
Aquí hay una manera de hacerlo sin expresiones regulares o bucles explícitos, aunque está ampliando un poco la definición de un trazador de líneas:
Funciona al dividir la cadena en una matriz de caracteres individuales, luego se usa
Array.reduce
para iterar sobre cada carácter. Normalmentereduce
devolvería un valor único, pero en este caso el valor único es una matriz y, a medida que pasamos por encima de cada carácter, lo agregamos al último elemento de esa matriz. Una vez que el último elemento de la matriz alcanza la longitud objetivo, agregamos un nuevo elemento de matriz.fuente
Llegando un poco más tarde a la discusión, pero aquí hay una variación que es un poco más rápida que la subcadena + matriz push one.
El cálculo previo del valor final como parte del ciclo for es más rápido que hacer las matemáticas en línea dentro de la subcadena. Lo probé tanto en Firefox como en Chrome y ambos muestran aceleración.
Puedes probarlo aquí
fuente