Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

260
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda