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

116
Vistas
Excluir algunos caracteres en la cadena

Entre comillas trato de excluir el ; caracteres usando expresiones regulares en Node.js.

Por ejemplo, tengo un sql como el siguiente:

 update codes set character='.' where character = ';' and write_date < now()-5 ;

Quiero encontrar filas afectadas antes de ejecutar la declaración. Escribí debajo de la expresión regular pero no funciona correctamente si la hay ; carácter entre comillas como arriba

 const regexp = /update\s+((.|\n)[^;]*?)\s+set\s+((.|\n)[^;]*?)\s+where\s+((.|\n)[^;]*?);/ig; regexp.exec(str)

Rendimiento esperado:

 table: codes where: character = ';' and write_date < now()-5

Pero obtengo:

 table: codes where: character = ';
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Puedes usar

 update\s+([^;]*?)\s+set\s(?:[^;]*?\s)?where\s+((?:'[^']*'|[^;])*?)\s*;

Vea la demostración de expresiones regulares . Detalles :

  • update - una palabra
  • \s+ - uno o más espacios en blanco
  • ([^;]*?) - Grupo 1: cero o más, pero la menor cantidad posible de caracteres que no sean ;
  • \s+ - uno o más espacios en blanco
  • set - una palabra
  • \s - un espacio en blanco
  • (?:[^;]*?\s)? - una secuencia opcional de caracteres que no sean ; la menor cantidad posible y luego un espacio en blanco
  • where - una palabra
  • \s+ - uno o más espacios en blanco
  • ((?:'[^']*'|[^;])*?) - Grupo 2: cero o más (la menor cantidad posible) secuencias de ' , cero o más no ' s, y luego ' , o cualquier carácter único que no sea un ;
  • \s* - cero o más espacios en blanco
  • ; - un ; carbonizarse.
about 4 years ago · Juan Pablo Isaza Denunciar

0

En primer lugar, no estoy seguro de para qué sirve (.|\n) , así que lo estoy ignorando.

Creo que hay dos problemas con su expresión regular, cambiar cualquiera probablemente resolverá su problema, pero cambiaría ambos, solo para estar seguro.

  1. el ? después de * hace que * no sea codicioso, lo que significa que la expresión regular coincidirá lo menos posible, de modo que final ; en la expresión regular coincidirá con la primera posible ; encuentra, no el último posible. Entonces dejaría el ? afuera.

  2. La expresión regular no usa $ para anclarse al final de la cadena. Agregar $ después de ; al final (posiblemente \s*$ si espera un espacio en blanco adicional al final de la cadena). Si hace esto, en realidad no necesita excluir ; . Y puede ser una buena idea agregar ^ (o ^\s* ) al principio para anclarse al principio de la cadena también.

Entonces la expresión regular resultante es

 const regexp = /^\s*update\s+((.|\n).*)\s+set\s+((.|\n).*)\s+where\s+((.|\n).*);\s*$/ig;

Finalmente, algunas ideas conceptuales: ¿Por qué estás haciendo esto en primer lugar? En lugar de comenzar con UPDATE SQL, ¿por qué no comienza con la estructura?

 { table: "codes", where: "character = ';' and write_date < now()-5" }

y construir tanto la ACTUALIZACIÓN como los SQL SELECCIONADOS a partir de eso?

O si solo tiene UPDATE SQL, en lugar de usar una expresión regular, hay bibliotecas de analizador SQL ( ejemplo ) que probablemente serían más confiables.

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