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.)
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, "+");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.