Necesito acortar el texto después de 50 caracteres, pero si el carácter 50 está en el medio de una palabra, corte solo después de la palabra y no antes.
texto de ejemplo: contrariamente a la creencia popular, Lorem Ipsum no es simplemente texto (59 caracteres)
resultado esperado: contrariamente a la creencia popular, Lorem Ipsum no es simplemente (54 caracteres)
Estaba intentando esto: text.substr(0,50).lastIndexOf(' ')); - no es bueno para mí porque corta el "simplemente" y quiero que simplemente esté en el texto más corto. ¡Gracias por la ayuda!
Si la longitud de la frase es inferior al límite, devuelve la frase; de lo contrario, ajuste el índice de corte al límite y explore hasta que encuentre un límite de palabra y corte la frase.
const clip = (phrase, limit) => { if (phrase.length <= limit) return phrase; let sliceIndex = limit; while (sliceIndex < phrase.length && /\b/.test(phrase[sliceIndex])) sliceIndex++; return phrase.slice(0, sliceIndex); }; const input = "Contrary to popular belief, Lorem Ipsum is not simply text"; const expected = "Contrary to popular belief, Lorem Ipsum is not simply"; const actual = clip(input, 50); console.log(actual === expected); // trueEstuvo cerca con la subcadena & indexOf. Si busca un espacio después de los primeros 50 caracteres, funcionará. Luego, hay un caso extremo en el que la cadena tiene más de 50 caracteres y no tiene espacio.
const shortener = (str) => { const offset = str.substring(50).indexOf(' '); return offset !== -1 ? str.substring(0,50 + offset) + '...' : str.length > 50 ? str + '...' : str; }La expresión regular puede ayudarte con eso.
La idea es encontrar al menos 50 símbolos que terminen con límite de palabra \b
let text = 'Contrary to popular belief, Lorem Ipsum is not simply text'; let shortetedText = text.match(/.{50,}?(?=\b)/)[0]; console.log(shortetedText); UPD:
Si desea crear una función que acorte su texto si tiene más de 50 símbolos, podemos crear una función que lo haga en su lugar.
let short = text => text.length > 50 ? text.match(/.{50,}?(?=\b)/)[0]: text;Entonces solo úsalo así:
let longText = 'Contrary to popular belief, Lorem Ipsum is not simply text'; let shortText = 'Lorem ipsum'; console.log(short(longText)); //will shorten text console.log(short(shortText)); //will leave text as it is bcoz it's shorter than 50 symbols