Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

246
Vistas
Regex: ¿Cómo deshacerse del símbolo de nueva línea final en el partido?

Estaba buscando una expresión regular que coincidiera con la primera fecha que NO es seguida por una línea que comienza con la letra 'R' (quiero obtener la última fecha de confirmación de git log , excepto solo para las confirmaciones de cambio de ruta).

 2021-12-07T16:39:43+01:00 M test.md 2021-12-07T16:18:59+01:00 R100 old.test.md test.md 2021-12-07T15:37:15+01:00 A old.test.md

Después de una lucha significativa, obtengo esta expresión regular (no me importa mucho la validez de la fecha, confío en Git):

 /20[\dT:.Z+]+(?:\r?\n)(?!R)/

Funciona bastante bien, pero deja un carácter de nueva línea final \n . No es gran cosa, puede ser reparado; pero encadenar de forma segura la match con replace hace que el código sea increíblemente feo (estoy usando Node.js):

 import { execSync } from "child_process" const allAuthorDates = execSync( `git log --follow --name-status --pretty=format:%aI -- test.md` ).toString() const lastEditExceptPathChangeDateMatch = allAuthorDates.match( /20[\dT:.Z+]+(?:\r?\n)(?!R)/ ) console.log(lastEditExceptPathChangeDateMatch) /* [ '2021-12-07T16:39:43+01:00\n', <-- how to get rid of that \n? index: 0, input: '2021-12-07T16:39:43+01:00\nA\ttest.md\n', groups: undefined ] */

Debido al carácter de nueva línea final, me veo obligado a usar el horrible let result = (str.match(/…/) || [""])[0].replace(…) está ahí para evitar el error de tiempo de ejecución en ( probablemente poco probable) en caso de que la coincidencia devuelva null .

¿Alguien sería tan amable de aconsejarme cómo editar la expresión regular para deshacerme del \n final durante la coincidencia, para hacer que el siguiente replace sea innecesario?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Debe hacer coincidir el final de la línea con $ (asegurándose de agregar la bandera m ) y luego usar la anticipación negativa con el patrón \r?\n movido a la anticipación justo antes de R :

 /20[\dT:.Z+]+$(?!\r?\nR)/m

Vea esta demostración de expresiones regulares . O, si quieres deletrear el patrón:

 /^20\d{2}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}[+-]\d{2}:\d{2}$(?!\r?\nR)/gm

Aquí, también agregué la bandera g para que coincida con múltiples ocurrencias. Vea esta demostración de expresiones regulares .

La parte $(?!\r?\nR) coincide con la posición anterior al carácter CR o LF (retorno de carro o avance de línea) y luego se asegura de que no haya un carácter CR opcional, un carácter LF y R inmediatamente a la derecha del carácter actual. ubicación.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda