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

101
Views
Hacer coincidir y reemplazar comentarios hash

Lo que estoy buscando

Me gustaría hacer coincidir los comentarios hash excluyendo los comentarios en línea en PowerShell. Puedo unirlos usando #(?<!<#)(?![<>])(.*)$ (ver regex101 ). Sin embargo, me gustaría lograr esto al no usar lookbehind. ¿Hay alguna manera de que pueda obtener el mismo comportamiento (o el más cercano) a la expresión regular con mirar atrás?

Una solución de expresiones regulares sería buena, pero también agradecería las soluciones de JavaScript.

lo que probé

Lo mejor que pude fue probar #(?!.*>)(.*)$ (ver regex101 ), pero no estoy contento de que se pierda todo lo que tiene > después de # .

También intenté escribir JavaScript solo analizando pero se volvió muy complejo (más de 30 líneas, ver pastebin ) y fue muy lento.

porque lo necesito

Lo uso para usar PowerShell en línea en un proyecto de código abierto ( código de GitHub ). Sin embargo, el proyecto está en línea y se ejecuta en el navegador ( sitio web ) y, lamentablemente, me di cuenta de que no funciona en Safari, ya que Safari aún no es compatible con lookbehind ( caniuse.com ).

Sintaxis: comentario hash vs comentario en línea

Regla: haga coincidir todos los comentarios hash pero excluya los comentarios en línea

Los comentarios hash en PowerShell, al igual que en bash y otros idiomas, comienzan desde hash ( # ) y continúan hasta el final de la línea.

 Write-Host "Hello world" # Here is a hash comment

Los comentarios en línea en PowerShell están entre <# y #>

 Write-Host <# Here is an inline comment #> "Hello world"
about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Podría hacer coincidir la siguiente expresión regular.

 ^(?:<#.*?#>|[^#])*(#.*)?

El grupo de captura, si no está vacío, contiene el comentario que se eliminará.

Manifestación

Pase el cursor sobre cada elemento de la expresión en el enlace para obtener una descripción de su función.

about 4 years ago · Juan Pablo Isaza Report

0

Con las expresiones regulares, que representan patrones de texto sin formato, no solo puede hacer coincidir fragmentos de texto, sino que también puede capturar partes de las coincidencias. Una vez que captura una subcadena, puede aplicar cualquier lógica que desee después de eso, ya sea reemplazando o conservando partes de la cadena.

Para reemplazar los comentarios, puede usar

 text = text.replace(/(<#.*?#>)|#.*/g, (m, g) => g ? g : "REPLACED")

Para eliminar los comentarios, puede utilizar

 text = text.replace(/(<#.*?#>)|#.*/g, "$1")

En ambos casos, el patrón es (<#.*?#>)|#.* :

  • (<#.*?#>) - Grupo 1: un texto <# , luego cero o más caracteres que no sean caracteres de salto de línea, la menor cantidad posible y luego texto #>
  • | - o
  • #.* - # char y el resto de la línea.

En el primer caso, (m, g) => g ? g : "REPLACED" g (m, g) => g ? g : "REPLACED" mantiene el valor del grupo 1 si el Grupo 1 coincide ( m representa la coincidencia completa y g representa el valor del Grupo 1). En el segundo caso, el valor del Grupo 1 se vuelve a colocar si coincidió con la ayuda de la referencia inversa $1 . Representa una cadena vacía si el Grupo 1 no coincide.

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!