[英]How can I use regex to replace variables by their value in a calculation string?
我想创建一个带有变量的计算器,但是变量和计算是由用户定义的。 我已经制作了一个程序来获取所有这些东西,但现在我想用计算中的值替换变量。
为了确保不只替换变量的一部分(例如,如果我定义了 'm' 和 'm1',我不想用 'm' 值替换 'm1' 中的 m),我有遵守以下条件:
在变量名之前,要么有一个左括号,要么是一个操作
在变量名之后,要么有一个右括号,要么是一个操作
当我得到计算时,空格被删除(我还没有包括那个功能)
为此,我编写了以下代码:
for (var i = 0; i < names.length; i++)
{
regex = "(\+|\-|\*|\/|\()" + names[i].value + "(\+|\-|\*|\/|\))"
replacement = "$1" + values[i].value + "$2"
calculation = calculation.replace(regex, replacement)
}
例如,对于变量“m”,我得到正则表达式: (\\+|\\-|\\*|/|\\()m(\\+|\\-|\\*|/|\\))
问题是没有找到任何东西(我试过(m+n+x)
)。 我知道问题来自正则表达式,但我找不到它。
您的regex
不会被视为正则表达式,而只是普通的string
。
相反,把它变成一个new RegExp()
。 请注意,模式字符串中的单个\\
将被删除(因为这是标准转义字符),因此您需要“双重转义”它们。
const names = [{value: "a"}, {value: "b"}]; const values = [{value: 1 }, {value: 5 }]; let calculation = "(a+b)"; for (var i = 0; i < names.length; i++) { const pattern = "(\\\\+|\\\\-|\\\\*|\\\\/|\\\\()" + names[i].value + "(\\\\+|\\\\-|\\\\*|\\\\/|\\\\))"; const regex = new RegExp(pattern); const replacement = "$1" + values[i].value + "$2" calculation = calculation.replace(regex, replacement) } console.log(calculation);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.