From 1f64e71381bcc569e0b66f29c2d469394ca45a97 Mon Sep 17 00:00:00 2001 From: "Ethan.Z" Date: Fri, 24 Jan 2025 21:28:35 -0500 Subject: [PATCH] fix expression parsing --- src-electron/db/query-feature.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src-electron/db/query-feature.js b/src-electron/db/query-feature.js index 60a3045267..598790cd4d 100644 --- a/src-electron/db/query-feature.js +++ b/src-electron/db/query-feature.js @@ -134,7 +134,7 @@ function evaluateConformanceExpression(expression, elementMap) { */ function evaluateBooleanExpression(expr) { // Replace terms with their actual values from elementMap - expr = expr.replace(/[A-Za-z][A-Za-z0-9]*/g, (term) => { + expr = expr.replace(/[A-Za-z][A-Za-z0-9_]*/g, (term) => { if (elementMap[term]) { return 'true' } else { @@ -167,7 +167,7 @@ function evaluateConformanceExpression(expression, elementMap) { let parts = expression.split(',') // if any term is desc, the conformance is too complex to parse for (let part of parts) { - let terms = part.match(/[A-Za-z][A-Za-z0-9]*/g) + let terms = part.match(/[A-Za-z][A-Za-z0-9_]*/g) if (terms && terms.includes('desc')) { return 'desc' } @@ -214,7 +214,7 @@ function evaluateConformanceExpression(expression, elementMap) { * @returns all missing terms in an array */ function checkMissingTerms(expression, elementMap) { - let terms = expression.match(/[A-Za-z][A-Za-z0-9]*/g) + let terms = expression.match(/[A-Za-z][A-Za-z0-9_]*/g) let missingTerms = [] let abbreviations = ['M', 'O', 'P', 'D', 'X'] for (let term of terms) { @@ -234,7 +234,7 @@ function checkMissingTerms(expression, elementMap) { */ function filterElementsContainingDesc(elements) { return elements.filter((element) => { - let terms = element.conformance.match(/[A-Za-z][A-Za-z0-9]*/g) + let terms = element.conformance.match(/[A-Za-z][A-Za-z0-9_]*/g) return terms && terms.includes('desc') }) } @@ -248,7 +248,7 @@ function filterElementsContainingDesc(elements) { */ function filterRelatedDescElements(elements, featureCode) { return elements.filter((element) => { - let terms = element.conformance.match(/[A-Za-z][A-Za-z0-9]*/g) + let terms = element.conformance.match(/[A-Za-z][A-Za-z0-9_]*/g) return terms && terms.includes('desc') && terms.includes(featureCode) }) } @@ -554,7 +554,7 @@ function filterRequiredElements(elements, elementMap, featureMap) { elementMap ) let expression = element.conformance - let terms = expression ? expression.match(/[A-Za-z][A-Za-z0-9]*/g) : [] + let terms = expression ? expression.match(/[A-Za-z][A-Za-z0-9_]*/g) : [] let featureTerms = terms.filter((term) => term in featureMap).join(', ') let elementTerms = terms.filter((term) => !(term in featureMap)).join(', ') let conformToElement = terms.some((term) =>