Quiero dividir una cadena según el límite de 30 caracteres y el problema aquí es que debería romperse en un punto ( . ) o una coma ( , ) o un espacio ( ). es decir, la longitud de la cadena de 30 o un delimitador, lo que ocurra primero. Probé con la coincidencia usando expresiones regulares, esto se divide bien, pero no con un delimitador.
Por ejemplo, aquí está mi código de muestra.
let x='Lorem ipsum dolor sit amet. Excepteur cuptat non proident, consectetur adipiscing elite detailo'; let splitString = x.match(/.{1,30}/g); console.log(splitString);Aquí la salida que obtengo es
[ "Lorem ipsum dolor sit amet. Ex", "cepteur cuptat non proident, c", "onsectetur adipiscing elite de", "tailo" ]Pero quiero que esto suceda usando una coma, un punto o un espacio como delimitador. La salida esperada es
[ "Lorem ipsum dolor sit amet.", "Excepteur cuptat non proident,", "consectetur adipiscing elite", "detailo" ]Podrías coincidir con esta expresión regular:
[^\s].{1,29}((?=\s|$)|(?<=[.,])) que busca un carácter que no sea un espacio ( [^\s] ), y luego hasta otros 29 caracteres ( .{1,29} ) que:
(?=\s|$) ; o(?<=[.,]) let x='Lorem ipsum dolor sit amet. Excepteur cuptat non proident, consectetur adipiscing elite detailo'; let splitString = x.match(/[^\s].{1,29}((?=\s|$)|(?<=[.,]))/g); console.log(splitString); let x='Lorem ipsum dolor sit amet. Excepteur cuptat non proident, consectetur adipiscing elite detailo'; let splitString = x.match(/.{1,30}[\.\s,]/g).map(item => item.trim()); const remaining = x.replace(splitString.join(' '), ''); splitString = [...splitString, remaining.trim()] console.log(splitString);Editar :
Eliminé los espacios finales en las subcadenas. No sé si es necesario, pero ahora existe el resultado deseado exacto.