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

306
Views
Regex coincide con la diferencia end_of_line/newline en C# y javascript

Escribí un analizador para un (subconjunto de) BBCode personalizado en Javascript y ahora lo traduje a C# . Este BBCode personalizado permite analizar línea por línea, por lo que tengo regex que me permiten "abrir" la primera línea de la cadena BBCode :

/(^.*$|^.*\r?\n)/

Coincide con una cadena vacía. La primera parte ^.*$ coincide con una cadena simple como "Simple string" (línea única sin CrLf al final). La segunda parte ^.*\r?\n coincide con la primera línea que termina con CrLf .

Esto funciona perfecto en Javascript . Pero mientras ejecutaba las pruebas unitarias en C# noté una diferencia.

Supongamos que tenemos "line1\n" como entrada.


La regex en Javascript coincidirá con ella de la siguiente manera:

^.*$ no coincidirá porque . es cualquier símbolo excepto CrLf y tenemos \n al final.

^.*\r?\n coincidirá ya que tenemos una cadena que comienza con 0 o más símbolos y \n al final.


Ahora en C# funciona diferente:

^.*$ coincidirá (¿por qué?), pero solo la line1 . Por lo tanto, todo el /(^.*$|^.*\r?\n)/ también coincidirá solo con la line1 y el \n desaparecerá.


¿Podría alguien por favor explicar? ¿Hay alguna forma de obligar a la expresión regular de C# regex a comportarse como la expresión regular de Javascript regex en el sentido descrito anteriormente?

La solución más sencilla sería cambiar el orden en el patrón: /(^.*$|^.*\r?\n)/ -> /(^.*\r?\n|^.*$)/ y asi se solucionara el problema...,

pero todavía me gustaría saber la razón detrás de esa diferencia.

Haga clic aquí para ver el código de prueba de C# ...

Para Javascript ver a continuación:

 const first_line_pattern = /(^.*$|^.*\r?\n)/ const single_string_pattern = /^.*$/ const line_pattern = /^.*\r?\n/ const input4 = "line1\n" function log(pattern) { let m4 = input4.match(pattern) console.log('~~~~~~~~' + pattern.toString() + '~~~~~~~~~') console.log("'line1\\n':':" + (m4 != null) + ":value: /" + (m4 ? m4[0] : 'no match') + "/") } log(first_line_pattern) log(single_string_pattern) log(line_pattern)

¡Gracias por tu tiempo!

about 4 years ago · Juan Pablo Isaza
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!