Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

250
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!