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

119
Vistas
¿Cómo evito que las reexpresiones regulares reemplacen la primera instancia de una coincidencia de patrones con los mismos valores en coincidencias de patrones posteriores?

Estoy seguro de que podría haber algo que responda esto directamente si esto es lo que estoy buscando. Ahora, sé que necesito comentar las cosas un poco mejor y el estilo probablemente podría necesitar algo de trabajo, así que sean amables, por favor. Si me puede señalar un hilo donde se ha resuelto el mismo problema, lo agradecería. (He intentado buscar uno, pero no estoy seguro de estar usando los términos de búsqueda correctos).

Aquí está el código:

 // Evaluate 5x style expressions and replace with * ivalue. eqvalue = eqvalue.replace(/-?[0-9]*[Xx]/g, eqvalue.match(/-?[0-9]*/) + "*" + ivalue); dvalue = dvalue.replace(/-?[0-9]*[Xx]/g, dvalue.match(/-?[0-9]*/) + "*" + ivalue); // Now do the same for naked polynoials like x^2 + x + 3 eqvalue = eqvalue.replace(/[Xx]/g, ivalue); dvalue = dvalue.replace(/Xx/g, ivalue);

Lo que intento hacer es convertir un polinomio en una cadena que pueda ejecutar a través de la función eval. Básicamente, si el usuario ingresa 5x^2 + x + 5 en un cuadro, quiero que se reemplace con algo como 5*2.9 + 2.9 +5 .

Hasta ahora, si ingreso una cadena como 5x^2 + 15x + 295 , obtengo 5*2.9 + 5*2.9 + 295 , y esto no es lo que quiero.

Estoy recibiendo esto en su lugar: ingrese la descripción de la imagen aquí

¿Cómo modifico las expresiones regulares para que no sustituyan el primer valor con el que se encuentran?

(Además, no se preocupe. La clase de cálculo ha terminado. Le prometí al profesor que no programaría un método de Newton después del curso, porque no le gustaba la idea de que yo escribiera una calculadora de sumas de Reimann. Una B- fue la nota final en el curso.)

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

0

La respuesta sugerida por Jay funciona bien, excepto en casos mixtos como este "5x^2 + x + 5", en este caso, después del reemplazo, su cadena será así: "5 * x^2 + * x + 5", que no es una expresión válida. Haz esto, para obtener una expresión completamente válida:

 dvalue = dvalue.replace(/(-?[0-9]*)[Xx]/g, "$1*" + ivalue); dvalue = dvalue.replace(/\+\s*\*/g, "+");
about 4 years ago · Juan Pablo Isaza Denunciar

0

En lugar de usar .match() , puede definir un grupo coincidente usando ( y ) en el patrón y consultar su contenido con $1 en el reemplazo:

 dvalue = "5x^2 + 15x + x + 295"; ivalue = 2.9; // add missing multiplication signs before x dvalue = dvalue.replace(/(-?[0-9]+)[Xx]/g, "$1*x"); // replace x with ivalue dvalue = dvalue.replace(/[Xx]/g, ivalue);

Resultado:

 "5*2.9^2 + 15*2.9 + 2.9 + 295"

EDITAR: Ajustado según los comentarios de Charchit.

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