以下场景的字符串“Regex”验证

nqwrtyyt  于 2023-02-17  发布在  其他
关注(0)|答案(1)|浏览(116)
var variables = ['A','B'];
var allowedMathFunc = ['Sin','Cos','Tan']
var expression= 'Sin(B)+Tan(B)+100+acos(A)+C'

我想验证以下场景中的表达式字符串匹配
1.表达式应使用变量数组值
1.表达式不应包含允许的其他数学函数。
我试过以下代码

var variables = ['A','B'];
var allowedMathFunc = ['Sin','Cos','Tan']
var expression= 'Sin(B)+Tan(B)+100+acos(A)'

for variable check I tried this 
let expressionVariables = value.replace(/Sin|Log|Exp|Tan|Pos|Rnd|[^A-Za-z]/ig,"");
let expressionUnUsedVar= variables.filter(v=> !expressionVariables.includes(v));

我不知道如何写两个场景的正则表达式,这不是一个问题,两个不同的正则表达式。

okxuctiv

okxuctiv1#

你可以使用regex来提取所有的变量和函数名,然后检查它们是否包含在允许的函数和变量列表中(区分大小写):

function testExpression(expression, vars, funcs) {
  const usedVariables = expression.match(/\b[a-z]+\b(?!\s*\()/gi);
  const usedFunctions = expression.match(/\b[a-z]+\b(?=\s*\()/gi);
  return usedVariables?.every(v => vars.includes(v)) && usedFunctions?.every(func => funcs.includes(func));
}

var variables = ['A','B'];
var allowedMathFunc = ['Sin','Cos','Tan']
var expression= 'Sin(B)+Tan(B)+100+acos(A)+C'
console.log(testExpression(expression, variables, allowedMathFunc));

console.log(testExpression('Sin(B)+Tan(B)+100+Cos(A)+C', ['A','B','C'], ['Sin','Cos','Tan']));

相关问题