Tengo una expresión regular: /diff\\left\((...*?\\right\){0,1})\\right\)/gm y la cadena que quiero hacer coincidir es diff\left(5x^2\right) + diff\left(5x^2+\tan\left(x\right)\right) .
Quiero hacer coincidir de tal manera que haya dos coincidencias diff\left(5x^2+\right) y diff\left(5x^2+\tan\left(x\right)\right) cada una con grupos capturados 5x^2 y 5x^2+\tan\left(x\right) . Quiero agregar \right) dentro de un grupo capturado una vez solo si ocurre dos veces. Sin embargo, solo obtengo una sola coincidencia con todo el 5x^2\right)+diff\left(5x^2+\tan\left(x\right) dentro de un grupo capturado. Aquí hay dos imágenes para una mejor comprensión. Las partes azules representan coincidencias y las partes verdes representan grupos capturados Aquí está el resultado que obtengo
La primera imagen es una captura de pantalla de regex101 y la segunda es una imagen editada
Por favor, ayúdenme con esto. Estoy tratando de crear una aplicación de calculadora simbólica. Gracias
Si esas dos partes siempre deben estar unidas por caracteres de space , puede intentar algo como lo siguiente: https://regex101.com/r/Lcsxxv/1
const regex = /diff\\left\(([^ ]*)\\right\)/gm; const str = `diff\\left(5x^2\\right) + diff\\left(5x^2+\\tan\\left(x\\right)\\right)`; const matches = []; const groups = []; let r; while ((r = regex.exec(str)) !== null) { matches.push(r[0]); groups.push(r[1]); } console.log(`matches:\n\t${matches.join('\n\t')} groups:\n\t${groups.join('\n\t')}`) La forma en que funciona es que va a buscar la última instancia de \right) hasta el final de la cadena o un carácter de space , lo que ocurra primero.
Espero que esto responda tu pregunta.