javascript中如何求解eval()中的(a+b)-(r+s)



我正在为特定网站的console制作特定代码,该代码检查特定元素(元素包含字符串,如23+43+54(21+3)-5),将其放入Javascript的eval()函数和console.log函数中,结果为:

let answer = eval(document.getElementsByClassName("ques_desc")[0].childNodes[0].textContent);
console.log(answer);

有时answer得到一个字符串,如:(16+27)-(36+43)。在这种情况下,虽然问题是正确的,我得到这个错误:

Uncaught SyntaxError: missing ) in parenthetical
<anonymous> debugger eval code:1

在这一点上,任何进一步的代码行停止执行,即使我把代码用花括号括起来,就像我们在数学中做的那样,它不起作用,我该怎么做来解决这样的问题?

missing ) in parenthetical错误意味着您不知怎么忘了写")">

很好,但是以下面的代码为例:

eval("7 * ((15 / 2.3333 % 25) + -21");

应该会产生一个错误,因为它缺少一个")"。但是如果你尝试下面的代码:

eval("7 * ((15 / 2.3333 % 25) + -21)");

语句不产生错误。

注意:强烈建议不要使用eval,特别是在用户输入中,因为黑客可以很容易地使用它来攻击你的网站(或Web应用程序)。

这就是问题的解决方案

var calculate = function(s, start = 0, end = s.length - 1, map = findParentheses(s)) {
const nums = [];
let op = 1;
for (let i = start; i <= end; i++) {
if (s[i] === '(') {
const result = calculate(s, i + 1, map[i] - 1, map);
nums.push(op * result);
i = map[i];
} else if (s[i] === '+') {
op = 1;
} else if (s[i] === '-') {
op = -1;
} else if (isNumber(s[i])) {
const str = parseNum(s, i);
const result = parseInt(str);
nums.push(op * result);
i += str.length - 1;
}
if (nums.length >= 2) {
const result = nums.shift() + nums.shift();
nums.push(result);
}
}
return nums.reduce((acc, cur) => acc + cur, 0);
};
function isNumber(str) {
return /[0-9]+/.test(str);
}
function parseNum(s, start) {
let i = start;
let output = '';
while (isNumber(s[i])) {
output += s[i];
i += 1;
}
return output;
}
function findParentheses(s) {
const map = {};
const stack = [];
for (let i = 0; i < s.length; i++) {
if (s[i] === '(') {
stack.push(i);
} else if (s[i] === ')') {
const left = stack.pop();
map[left] = i;
}
}
return map;
}

将此求解代码添加到您的问题中,这将评估您的问题。

相关内容

  • 没有找到相关文章

最新更新