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

165
Vistas
expresiones regulares para encontrar más de una ocurrencia de comentario dentro de un bloque

Tengo algunos archivos de descuento en los que sigo un cierto formato de preguntas y respuestas para sincronizar mis tarjetas de mi software de toma de notas Obsidian con Anki. De alguna manera, parece haber un problema donde se crearon preguntas duplicadas en Anki debido a los caracteres de nueva línea. Quiero encontrar estos duplicados y eliminarlos de mi nota y eliminar los caracteres de nueva línea redundantes que causaron que ocurrieran estas preguntas duplicadas. Aquí hay un archivo de datos de muestra:

 ### Alias Q: what check to do before creating an alias? A: check whether any other command exists by that name using `type new-alias-name` <!--ID: 1643091253375--> --- Q: syntax to create an alias? A: `alias name='string'` <!--ID: 1645446702965--> - no spaces before or after the equal sign - single quotes around the command sequence ![[Pasted image 20220125092954.png]] <!--ID: 1643091253408--> --- ### Redirection/Piping Q: output of `> ls-output.txt` A: the file will be truncated if it exists or it would be created. <!--ID: 1645087988730--> - Simply using the redirection operator with no command preceding it will truncate an existing file or create a new empty file <!--ID: 1643351731943--> ---

Cada comentario que tiene un formato como <!--ID: 1645446702965--> es una tarjeta flash en Anki. En la 2da pregunta para crear un alias, puedes ver que hay 2 IDs. Quiero eliminar el primero y eliminar las nuevas líneas después de eso para que solo quede un comentario de ID.

Aquí está la expresión regular que estoy intentando - ^A:.+?(<!--ID:\s\d+-->)(?!---).+(<!--ID:\s\d+-->)

Aquí estoy tratando de hacer coincidir las secciones de Respuesta donde los comentarios de ID aparecen dos veces. Estoy usando una anticipación negativa para permitir cualquier cosa que no sea --- . Pero lo más destacado muestra que la expresión regular está llegando demasiado lejos. Soy bastante nuevo en Regex y acabo de terminar una ronda de lectura 'Dominar expresiones regulares por Jeffrey Friedl'. Todavía estoy tratando de entender el comportamiento codicioso y perezoso. Cualquier orientación que me ayude a avanzar en esto sería apreciada.

Instantánea de expresiones regulares en regex101.com

Tengo mi expresión regular con los datos publicados aquí en caso de que alguien quiera probar: https://regex101.com/r/jBSc8Y/1

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

0

Además de las versiones ya vinculadas con los comentarios, la solución más práctica podría ser usar un reemplazo de cadena con una expresión regular simple como /<!--\s*ID:\s*\d+\s*-->\n+-\s+/g ... donde uno coincidiría ...

  • <!--\s*ID:\s*\d+\s*--> ... el formato de ID exacto
  • \n+-\s+ ... seguido de al menos una nueva línea, un guión y un espacio en blanco (-secuencia).

El último punto también describe lo que hace que un formato de ID sea un duplicado.

Entonces uno solo necesita reemplazar la coincidencia por - .

 const sampleText = ` ### Alias Q: what check to do before creating an alias? A: check whether any other command exists by that name using \`type new-alias-name\` <!--ID: 1643091253375--> --- Q: syntax to create an alias? A: \`alias name='string'\` <!--ID: 1645446702965--> - no spaces before or after the equal sign - single quotes around the command sequence ![[Pasted image 20220125092954.png]] <!--ID: 1643091253408--> --- ### Redirection/Piping Q: output of \`> ls-output.txt\` A: the file will be truncated if it exists or it would be created. <!--ID: 1645087988730--> - Simply using the redirection operator with no command preceding it will truncate an existing file or create a new empty file <!--ID: 1643351731943--> `; const regXDuplicateId = /<!--\s*ID:\s*\d+\s*-->\n+-\s+/g; console.log( sampleText.replace(regXDuplicateId, '- ') );
 .as-console-wrapper { min-height: 100%!important; top: 0; }

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