Buenas a todos,
Estoy trabjando en un proyecto personal y tengo un problema que no se cómo abordarlo eficientemente y sin romperme mucho la cabeza. He intentado buscar algún planteamiento pero no he encontrado nada (seguramente sea porque no doy exactamente con las palabras necesarias para la búsqueda).
Supongamos que tenemos una cadena de texto que representa una lógica a aplicar.
Un ejemplo más o menos sencillo
((1 OR 2) AND 3 OR (4 OR 2) OR 5
Si te dicen de eliminar el 2 se tendría que quedar así
(1 AND 3 OR 4) OR 5
Mi primer acercamiento ha sido tirar de expresiones regulares teniendo en cuenta algunos casos de uso en los que podría estar el número. Pero este acercamiento creo que no es el correcto porque creo que hay demasiados casos de uso que se me escapan. ¿A alguien se le ocurre como plantear el problema?
Mi acercamientolet number = 2;
let logic = '((${1} || ${2}) && ${3} && ${4}) || ${5}';
const removeLeadingNumber = new RegExp(
`^\\$\\{` + number + `\\}\\s(\\&\\&|\\\|\\\|)\\s`,
"gi"
);
const removeLeadingParenthesis = new RegExp(
`^\\(\\$\\{` + number + `\\}\\)\\D*`,
"gi"
);
const removeNumberAfterLogicalOperators = new RegExp(
`\\s(\\&\\&|\\|\\|)\\s\\$\\{` + number + `\\}`,
"gi"
);
const removeNumberAfterParenthesisAndReplace = new RegExp(
`\\(\\$\\{` + number + `\\}[^\\)][^\$)]*`,
"gi"
);
const removeNumberAfterParenthesisAndNotReplace = new RegExp(
`\\D*\\(\\$\\{` + number + `\\}\\)`,
"gi"
);
const removeOnlyOneNumber = new RegExp(
`^\\$\\{` + number + `\\}$`,
"gi"
);
return logic
.replaceAll(removeLeadingNumber, "")
.replaceAll(removeLeadingParenthesis, "")
.replaceAll(removeNumberAfterLogicalOperators, "")
.replaceAll(removeNumberAfterParenthesisAndReplace, "(")
.replaceAll(removeNumberAfterParenthesisAndNotReplace, "")
.replaceAll(removeOnlyOneNumber, "");