es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Utilizando expresiones regulares para insertar saltos de línea duros y envolver el texto hasta cierta longitud de línea máxima, en espacios cuando sea posible.

Estoy teniendo un poco de dificultad para encontrar la forma correcta de codificar mi expresión regex. Básicamente, quiero insertar saltos de línea forzados (<br>) en una cadena. Digamos que quiero que la longitud máxima de cada línea sea de 10 caracteres. Quiero insertar un <br> en el espacio más cercano antes del undécimo carácter, y justo antes del undécimo carácter si la línea actual no tiene espacios dentro de sus 10 caracteres. Si la última línea tiene menos de 10 caracteres, no hacemos nada.

Ejemplo: Hello there, my name is Bob -> Hello <br>there, my <br>name is <br>Bob

Ejemplo: HelloThereMyName -> HelloThere<br>MyName

Mi expresión regex actual es:

typescript
x.replace(/[\s\S]{1,10}(?!\S)/g, '$&<br>')

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Tu expresión regular actual parece estar casi correcta.

    [\s\S]{1,10} coincide con cualquier carácter (incluyendo espacios en blanco y no espacios en blanco) con una longitud de 1 a 10. (?!\S) es una búsqueda negativa hacia adelante que impone una longitud máxima de 10 caracteres.

    Sin embargo, esta expresión regular insertará una etiqueta <br> en el caracter 11, lo cual no es lo que deseas. Quieres que la etiqueta <br> se inserte en el último espacio antes del caracte 11.

    Para lograr esto, puedes modificar tu expresión regular para que coincida con cualquier carácter hasta el espacio más cercano antes del carácter 11. Aquí tienes una expresión regular corregida:

    x.replace(/(.{1,10})(\s+|$)/g, '$1<br>$2')
    

    Explicación:

    • .{1,10} coincide con cualquier carácter (excepto saltos de línea) con una longitud de 1 a 10.
    • (\s+|$) coincide con uno o más caracteres de espacio en blanco, o el final de la cadena.
    • $1<br>$2 reemplaza el texto coincidente con el primer grupo (hasta el espacio más cercano antes del carácter 11) seguido de <br> y el segundo grupo (uno o más caracteres de espacio en blanco o el final de la cadena).

    Con esta expresión regular, tus ejemplos deberían funcionar correctamente:

    Hola, mi nombre es Bob -> Hola<br>, mi<br>nombre es<br>Bob
    HolaMundo -> HolaMundo<br>
    

Comments are closed.